Information Hiding

은닉된 프로퍼티

자바스크립트에는 은닉된 프로퍼티라는 개념이 없다. 자바에는 private, protected, public과 같은 접근제어자가 있어서 외부에서 인스턴스 멤버에 접근하는 것을 통제할 수 있지만, 자바스크립트는 클래스의 모든 프로퍼티가 public이다.

종종 프로퍼티 이름 앞에 언더스코어를 붙이는 방식(this._name)으로 private한 변수임을 표현하는 경우도 있는데, 실제로 프로퍼티가 private하게 동작하는 것은 아니기 때문에 오해를 불러일으킨다는 의견이 있다. Airbnb JavaScript 스타일 가이드를 참고.

프로퍼티 대신 변수를 사용하면 정보를 은닉하는 효과를 낼 수 있다.

// Animal.js
class Food{
    constructor(name) {
        let name = name;

        this.getName = () => { 
            return name;
        };

        this.setName = (newName) => {
            name = newName;
        }
    }
}

export default Food;

변수는 해당 블록 안에만 존재하기 때문에 해당 블록을 벗어나서 접근하면 undefined가 된다. (단, 블록 스코프를 갖는 let, const와 달리 var는 함수 스코프를 갖는다.) 따라서 constructor 안에 변수를 선언하면 외부에서 name에 직접 접근할 수 없다. 더불어 name을 가져오는 프로퍼티와 name을 설정하는 프로퍼티를 두면 외부에서 getNamesetName을 통해 name에 간접적으로 접근할 수 있다.

Last updated