getter/setter

리안·2023년 3월 22일
0

getter, setter는 캡슐화를 위해 쓰인다. 캡슐화란 정보를 캡슐안에 저장하여 외부 데이터를 외부로부터 보호하는 것을 말한다. getter,setter는 이런 목적을 위해 객체 안 함수(메소드)를 대신하는 기능이다.

객체를 일반적인 방식으로 변경할 수도 있지만, 변경시 입력된 값을 어떠한 기능을 거쳐 변경이 가능하게 한다.
즉, 데이터를 외부의 접근으로부터 '보호하기 위한' 목적으로 사용된다.

getter : 프로퍼티에 접근한다. ==> return이 필수적
setter : 프로퍼티를 직접 수정한다. ==> ()파라미터가 있어야 한다.

다음 예시를 보자.

const Person = {
  age :20,
  set newAge(age){
    if(typeof age !== 'number'){
      console.log('error');
 } else {
    this.age = age;
   console.log('change success')
  }},
  get newAge(){ //getter뒤에 () 필수
    return this.age;
  }
}

Person의 age는 20으로 할당되어 있고, 나는 이 값을 재할당 하고 싶다. 하지만 일반적으로 재할당하면 숫자가 아닌 값을 입력해도 그대로 재할당된다.이를 막기위해서 숫자가 아닌 값으로 재할당하면 'error'를 띄우고, 숫자로 잘 재할당했으면 'change success'라는 문구를 띄워주는 newAge를 setter함수로 정의하였다.

Person.newAge = '40';
console.log(Person.age);

위와 같이 숫자가 아닌값으로 재할당했더니 'error'가 뜨고 age가 원래값인 20으로 뜨는 것을 볼 수 있다.

Person.newAge = 30;
console.log(Person.age);

하지만 숫자인 30으로 할당하니 change success가 뜨면서 변경된 값으로 age가 바뀌었다.

getter,setter쓸때 주의할 점

getter와 setter는 메소드(함수)이다. 그러나 사용시 일반함수처럼 이름 뒤에 ()를 사용하면 안된다.

예를 들어 위예제에서, 다음과 같이 쓰면 에러가 난다.

//getter사용시
console.log(Person.newAge()); 
//()를 적으면 안된다.

//setter사용시
Person.newAge(20);
//()안에 매개변수를 사용하면 안된다.
//다음과 같이 쓴다.
Person.newAge = 20;

그 외 예제...


const data = {
    odd : [],
    even : [],
  ///num을 짝수시 even,홀수시 odd에 넣어준다.
    set Div(num){
        if(num % 2 === 0 ){
            this.even.push(num);
        }else{
            this.odd.push(num);
        };
    },
  //odd,even을 한 배열에 묶어 오름차순으로 정렬한 값을
  //보여준다.
    get Show(){
        const answer = [...this.odd,...this.even];
        return answer.sort((a,b)=>a-b);
    }
}

클래스 사용 예제

class Unit{
  //기본 공격력과 체력이다
    constructor(){
        this.공격력 = 5;
        this.체력 = 100;
    }
//battlePoint시 공격력과 체력 합한 점수를 반환
    get battlePoint(){
        return this.공격력 + this.체력;
    }
  //heal을 사용하면 체력이 50 올라간다.
    set heal(체력){
        체력 += 50;
        console.log(체력);
    }
}
profile
좋은 개발자가 되기 위한 한 걸음

0개의 댓글