시스템아 미안해
Chapter 4 - Item 35. private 데이터를 저장할땐 클로저를 사용하라 본문
JavaScript에는 private 키워드가 없었기 때문에(ES2022 전),
외부에서 접근 불가능한 데이터를 만들려면 클로저를 사용했다.
function Counter() {
let count = 0; // private 변수
this.inc = function() {
count++;
return count;
};
this.dec = function() {
count--;
return count;
};
}
const c = new Counter();
console.log(c.inc()); // 1
console.log(c.count); // undefined (직접 접근 불가)
- count 변수는 생성 시점의 스코프 안에만 존재
- 외부에서 접근하거나 수정할 수 없고, 오직 메서드를 통해서만 조작 가능
ES6 이후 class 문법에서도 이 방식은 여전히 가능하지만,
ES2022부터는 정식 private 필드 문법(#)이 도입되어 더 간결하게 쓸 수 있다.
class Counter {
#count = 0; // private 필드
inc() {
return ++this.#count;
}
dec() {
return --this.#count;
}
}
const c = new Counter();
console.log(c.inc()); // 1
console.log(c.#count); // SyntaxError (직접 접근 불가)
- ES2022 이상의 환경이라면 #private 필드를 쓰는 것이 간단하고 안전하다.
- 하지만 라이브러리나 브라우저 지원 범위 때문에 아직 클로저 방식을 쓰는 곳도 많다.
- 클로저 방식은 private 상태를 인스턴스 단위로 안전하게 유지할 수 있다는 장점이 있다.
- 반대로, 메서드도 클로저로 생성되기 때문에 인스턴스마다 함수 객체가 생겨 메모리 비용이 커질 수 있다.
'책 > Effective JavaScript' 카테고리의 다른 글
| Chapter 4 - Item 37. this의 암묵적 바인딩을 이해하라 (0) | 2025.08.10 |
|---|---|
| Chapter 4 - Item 36. 인스턴스 상태는 반드시 인스턴스 객체에만 저장하라 (0) | 2025.08.10 |
| Chapter 4 - Item 34. 메서드는 프로토타입에 저장하라 (2) | 2025.08.10 |
| Chapter 4 - Item 33. 생성자를 new에 의존하지 않게 만들기 (0) | 2025.08.10 |
| Chapter 4 - Item 32. __proto__를 절대 수정하지 말라 (2) | 2025.08.10 |