🤔캡슐화? 정보은닉?
- 캡슐화란 프로퍼티 메서드를 하나로 묵는 것이다.
- 특정 프로퍼티나 메서드를 은닉하기 위한 목적이다.
- 정보 은닉은 정보를 보호하고 결합도(coupling, 객체간의 상호 의존성)를 낮추는 효과가 있다.
- 대부분의 객체 지향 프로그램에선 public, private, protected 같은 접근 제한자를 선언하여 공개 범위를 설정할 수 있다.
- 자바스크립트에서의 프로퍼티와 메서드는 기본적으로 public상태이다.
🤨자바스크립트에서의 정보은닉
function Person(name, age){
this.name = name;
let _age = age;
this.sayHi = function () {
console.log(`Hi! My name is ${this.name}. I am ${_age}`)
}
}
const me = new Person('Lee',20);
me.sayHi(); // Hi! My name is Lee. I am 20
console.log(me.name) // Lee
console.log(me._age) // undefined
const you = new Person('Kim',25);
you.sayHi(); // Hi! My name is Kim. I am 25
console.log(you.name) // Kim
console.log(you._age) // undefined
위의 코드에서 _age 변수는 private하다. 하지만 위의 코드에서 Person 생성자 함수의 sayHi 메서드가 중복 생성된다.
프로토타입을 사용한 중복 생성 방지 410 ~ 412p
- 위의 예제와 같이 인스턴스를 활용하여 정보은닉을 흉내낼 수 있지만, 중복 생성이 일어난다.
- 프로토타입을 이용하여 중복방지 생성을 하면 정보은닉이 불가능하다.
- Symbol, WeakMap을 사용하여 private 프로퍼티를 흉내내기도 했지만 근본적인 해결이 되진 못했다.
- private필드 정의 제안을 통해 이를 해결할 수 있다!
😀Private filed
class PrivateFiled {
#privateProperty = 'foo'
publicPropery = 'bar'
//private instance method
#privateMethod() {
return 'Kim'
}
publicMethod() {
return this.#privateProperty;
}
}
const obj = new PrivateFiled()
console.log(obj.#privateProperty) // Error
console.log(obj.publicPropery) // bar
console.log(obj.publicMethod()) // foo
console.log(obj.#privateMethod()) // Error
- ‘#’ 해쉬를 통해 private 변수를 만들 수 있다.
- 메서드를 통해서 private 변수에 접근할 수 있다.
'기술 서적 > 하루 30분 모딥다' 카테고리의 다른 글
[하루 30분 모던 자바스크립트 딥 다이브] 클래스 2 (0) | 2023.07.25 |
---|---|
[하루 30분 모던 자바스크립트 딥 다이브] 클래스 (0) | 2023.07.24 |
[하루 30분 모던 자바스크립트 딥 다이브] 클로저란 무엇인가 (0) | 2023.07.21 |
하루 30분 모던 자바스크립트 딥 다이브 실행 컨텍스트 2 (0) | 2023.07.06 |
하루 30분 모던 자바스크립트 딥 다이브 실행 컨텍스트 1 (0) | 2023.07.05 |