ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Javascript getter와 setter에 대해서
    객체지향 2024. 7. 17. 16:55
    728x90

     

    상태 값에 this._변수명 으로 짓는 이유

    class Person {
      constructor(name, age) {
        console.log("여기 실행");
        this.name = name;
        this.age = age;
      }
      
      get age() {
        return this._age;
      }
    
      set age(value) {
        console.log("setter 호출");
        this.age = value < 0 ? 0 : value;
      }
     }
     
    const user = new Person("hello", "world", -1);
    
    // 위의 코드를 이걸 풀어서 쓰면
    user.firstname = "hello";
    user.lastname = "world";
    user.age = -1;
    this._age가 아니라 this.age로 상태 변수를 지정 해두면
    javascript에서 setter를 호출하는 방법은
    user.age = -1 이다
    결국 
    const user = new User("hello", "world", -1);는
    set함수는 value값으로 user.age값을 자동으로 받아오게 된다.
    setter를 호출하는 순간 전달된 value를 this.age에 할당할 때 메모리에 값을 업데이트 하는 것이 아니라 setter를 호출하게 된다.
    그래서 결국 무한루프에 빠지게 된다.

     

    그래서 this._변수명 으로 짓는다. 사실 원하는 변수명으로 지어도 상관 없지만 통념상 언더바로 짓는다.

     

     

     

    객체지향에서 getter와 setter를 지양해야 되는 이유

    Getter와 Setter의 사용은 객체 지향의 핵심인 정보 은닉을 해치게 된다.
    이로 인해 외부에서 객체의 상태를 알게 되거나 객체의 상태를 그대로 수정하게 되고, 객체의 상태가 변경되면 의도하지 않은 동작을 수행하여 문제가 발생할 수 있다.
    그렇기 때문에 상태를 꼭 변경 해야 될 일이 생긴다면 명확한 의도를 가진 메소드를 이용하여 구현 하자

     

     

     

    Reference

    - ( https://colabear754.tistory.com/173#%EB%A7%88%EC%B9%98%EB%A9%B0 )

    728x90
Designed by Tistory.