Information Hiding
은닉된 프로퍼티
자바스크립트에는 은닉된 프로퍼티라는 개념이 없다. 자바에는 private, protected, public과 같은 접근제어자가 있어서 외부에서 인스턴스 멤버에 접근하는 것을 통제할 수 있지만, 자바스크립트는 클래스의 모든 프로퍼티가 public이다.
종종 프로퍼티 이름 앞에 언더스코어를 붙이는 방식(this._name
)으로 private한 변수임을 표현하는 경우도 있는데, 실제로 프로퍼티가 private하게 동작하는 것은 아니기 때문에 오해를 불러일으킨다는 의견이 있다. Airbnb JavaScript 스타일 가이드를 참고.
프로퍼티 대신 변수를 사용하면 정보를 은닉하는 효과를 낼 수 있다.
변수는 해당 블록 안에만 존재하기 때문에 해당 블록을 벗어나서 접근하면 undefined가 된다. (단, 블록 스코프를 갖는 let
, const
와 달리 var
는 함수 스코프를 갖는다.) 따라서 constructor 안에 변수를 선언하면 외부에서 name
에 직접 접근할 수 없다. 더불어 name
을 가져오는 프로퍼티와 name
을 설정하는 프로퍼티를 두면 외부에서 getName
과 setName
을 통해 name
에 간접적으로 접근할 수 있다.
Last updated