728x90
class의 속성(property)들은 public하며 class외부에서 읽히고 수정될 수 있지만
ES2019에서 #을 추가해 private class 필드를 선언할 수 있게 되었다.
Private Instance Fields (#변수)
"내 차 대시보드 안의 잠긴 서랍"
new Car()로 뽑은 내 자동차(인스턴스)만이 가질 수 있는 비밀 데이터
- 이름 앞에 반드시 # 을 붙여야함 (이게 자물쇠야!)
- 밖에서는 절대 못 열음 (car.#secret 하면 에러 뻥!)
- 반드시 클래스 맨 윗줄에 "나 이거 쓸 거야"라고 선언해야함
class Car {
#fuel; // 1. 선언 (자물쇠 달린 연료통)
constructor() {
this.#fuel = 100; // 2. 내 차니까 접근 가능
}
}
const myCar = new Car();
// myCar.#fuel = 0; // 🚨 삐-! 에러! (밖에서는 못 건드림)
Private Instance Methods (#함수())
"운전자는 몰라도 되는, 엔진 내부의 비밀 동작"
자동차 내부에서 자기끼리만 신호를 주고받을 때 쓰는 기능
운전자가 직접 "엔진 온도 체크해!"라고 안 하지? 차가 알아서 함
- 용도: 주로 '검증(Validation)'이나 '복잡한 계산'을 숨길 때 사용
- 특징: Getter나 Setter도 #을 붙여서 비밀로 만들 수 있음
class Car {
move(speed) {
if (this.#checkEngine(speed)) { // 내부에서만 몰래 호출
console.log("출발!");
}
}
#checkEngine(speed) { // 🔒 비밀 함수
return speed < 200; // 엔진 과부하 체크
}
}
Private Static Fields & Methods (static #변수)
"자동차 공장 본사의 1급 기밀 금고"
- 설명: 이건 개별 자동차(소나타, 아반떼)는 몰라. 오직 Car라는 공장(클래스) 자체만 아는 비밀
- 주의할 점 (상속의 함정):
- this를 쓰면 위험!
- 공장장(Class)이 바뀌면 금고 문이 안 열림
- 그래서 Static Private을 쓸 때는 this 대신 클래스 이름(Car)을 직접 부르는 게 안전
class CarFactory {
static #SECRET_CODE = 1234; // 공장 기밀 번호
static getCode() {
// return this.#SECRET_CODE; // ⚠️ 위험! 상속받은 공장(자식 클래스)에서는 에러 날 수 있음.
return CarFactory.#SECRET_CODE; // ✅ 안전! 공장 이름을 직접 불러라.
}
}
🚨 핵심 요약
- 캡슐화(Encapsulation)의 완성: #을 붙이면 "외부 접근 절대 불가" 상태가 된다. 개발자의 실수(오작동)를 원천 봉쇄할 수 있다.
- 선언은 필수: #변수는 반드시 클래스 최상단에 적어줘야 한다. 안 그러면 자바스크립트가 "이게 뭐야?" 하고 에러를 낸다.
- Static의 함정: static #을 쓸 때는 this 때문에 에러가 자주 나니, 웬만하면 클래스 이름을 명시하는 습관을 들이자!
728x90
'🦎 JavaScript' 카테고리의 다른 글
| 📌자바스크립트 치트시트 (반복 메서드 추가!) 📌 (0) | 2025.12.01 |
|---|---|
| [JavaScript] 총 정리 (0) | 2023.05.29 |
| [JS] 핸들링 클릭 이벤트(handling click events) (0) | 2023.03.23 |
| [JS] DOM 요소 선택 및 DOM조작 (0) | 2023.03.23 |
| [JS] DOM (0) | 2023.03.23 |
