캡슐화와 정보 은닉

박경찬·2022년 7월 15일
0

JavaScript

목록 보기
13/26

캡슐화는 객체의 상태를 나타내느 프로퍼니를 참조하고 조작할수 있는 동작인 메서드를 하나로 묶는 것을 말한다.

캡슐화는 객체의 틀정 프로퍼티나 메서드를 감출 목적으로 사용하기 도 하는데 이를 정보 은닉이라 한다.

자바스크립트는 public, private , protected 같은 접근 제한자를 제공하지 않는다. 따라서 자바스크립트 객체의 모든 프로퍼티와 메서드는 기본적으로 외부에 공개되어 있다. 즉, 객체의 모든 프로퍼티와 메서드는 기본적으로 public 이다.

위 name프로퍼티는 현재 외부로 공개되어 있어서 자유롭게 참조하거나 변경할수 있지만 _age(private) 변수는 Person 생성자 함수의 지역 변수이므로 Person생성자 함수 외부에서 참조하고나 변경할수 없다.

Person.prototype.sayHi 메서드는 즉시 실행함수가 종료된 이후 호출된다. 하지만 Person 생성자 함수와 sayHi 메서드는 이미 종료되어 소멸한 즉시 실행 함수의 진역 변수 _age 참조할수 있는 클로저가 된다.

Person 생성자 함수가 여러 개의 인스턴스를 생성할 경우 다음과 같이 _age 변수의 상태가 유지되지 않는다는 것이다.

자바스크립트는 정보 은닉을 완전하게 지원하지 않는다. 인스턴스 메서드를 사용한다면 자유변수를 통해 private을 흉내 낼 수는 있지만 프로토타입 메서드를 사용하면 이마자도 불가능해진다. ES6의 symbol 또는 WeakMap을 사용하여 private한 프로퍼티를 흉내 내기도 했으나 근복적인 해결책이 되지 않는다.

0개의 댓글