JS

get/set

gurwhddl 2022. 10. 2. 15:40
let 사람 = {
 
name : 'suzy';
 
age : 30;
 
}
 
여기서 age를 뽑고싶으면 사람.age 하면되지만 요즘 트렌드는 사람 이라는 오브젝트에 출력 함수를 따로 만들어서 뽑는편이라함.
let 사람 = {
 
name : 'suzy';
 
age : 30;
 
내년나이( ){
      return this.age + 1
 
나이변경(변경할나이){
     this.age = 변경할나이
}
 
쓰면 좋은이유

1. object 자료가 매우 복잡할 때 

사람.age + 1

사람.내년나이( )  //  이 둘은 같은 값이지만 자료가 복잡해지면 사람.age같이 점 한번으로 들어가기가 어려운 경우가 생김. 이때 유용

 

2. 데이터 업데이트 할때 편함 (데이터 수정시 미리 거를 수 있음)

 - 이것도 마찬가지로

사람.age = 변경할나이 해줘도 똑같지만

가끔 숫자를 문자열로 입력한다거나 음수가 입력된다거나 이럴때가 있음. 

이럴때 함수니까 if로 조건을 건다거나 parseInt같은걸로 실수 방지도 가능

parseInt('123123') - 123123

 

set / get 키워드 - 소괄호 안써도 작동 가능하게해줌

보통 set은 데이터 변경하는 함수 - 파라미터가  딱 1개 있어야함

        get은 데이터 꺼내쓰는 함수에 사용 - return 있어야함

 

get 내년나이( ){
      return this.age + 1

 

}
set 나이변경(변경할나이){
     this.age = 변경할나이
}

원래는 사람.내년나이 ( ) / 사람.나이변경(30) 이렇게 해줘야됐던걸 저 키워드를 통해

사람.내년나이

사람.나이변경 = 30 이렇게만 해줘도 똑같이 변경됨 

저걸 붙이면 이제 function이 아님. ( ) 붙이면 not a function 오류남

그냥 저기있는 name, age와 동일하게 사용할 수 있다고 생각하면됨

저거 붙어있으면 소괄호 쓰지말기!!!!!

 

class에서 사용하는 get/set

class 사람만들기 {
constructor(이름,나이) {
this.name = '이름';
this.age = '나이'
}
get 내년나이(){
return this.age + 1;
}
set 나이바꾸기(변경할나이){
if (변경할나이 < 0) {alert('must positive')}
else this.age = parseInt(변경할나이);
}
}

let 사람1 = new 사람만들기()
 
여기서 주의할점은 저 constructor 안에 직접적으로는 못씀. 전에 배웠던 밑 중괄호, 즉 prototype으로 주는 자리에 써야 적용가능.
쓸때는 사람1.나이바꾸기 = 변경할나이 해주면됨
만약에 사람1.나이바꾸기 = -1 하면 설정한대로 alert가 뜸
 
진짜 책에서 볼때는 저게 뭔소린가 싶었는데 좀 이해가 가긴 하는듯...