728x90

📖 1. 프라이빗 필드(privateField)
자바스크립트는 ES20222(ES13) 버전 부터 프라이빗 필드/메서드를 공식적으로 지원합니다. 방법은 간단하게 # 기호를 붙여 사용할 수 있습니다.
class Person {
#name; // private 필드 선언
constructor(name) {
this.#name = name; // 생성자에서 초기화
}
getName() {
return this.#name; // 내부에서는 접근 가능
}
setName(newName) {
this.#name = newName; // 외부 값 접근 허용
}
}
const p = new Person("mary");
console.log(p.getName()); // ✅ "mary";
console.log(p.#name); // ❌ SyntaxError: Private field '#name' must be declared in an enclosing class
- #name은 오직 Person 클래스 안에서만 접근이 가능
- 외부 코드에서는 #name을 읽거나 수정할 수 ❌
- 대신 getName, setName 같은 공개 매서드(public method)를 통해 제어 가능
🔒 2. 프라이빗 메서드(#method())
클래스 내부에서만 호출 가능한 함수(동작)으로 #을 붙이면 외부 호출이 불가능합니다, 보통 공개 메서드에서 내부적으로만 사용하는 기능을 숨길 때 활용합니다.
class sport {
// 프라이빗 메서드
#run(a, b) {
return a * b;
}
play(x) {
return this.#run(x, x); // 내부에서만 호출
}
}
const s = new sport();
console.log(`he is ${s.play(5)} km running`); // ✅ he is 200 km running
// console.log(p.#name(2, 3)); // ❌ SyntaxError: Private field '#name' must be declared in an enclosing class
- #run은 sport 클래스 안에서만 사용 가능
- 외부 객체가 직접 곱셈 기능을 쓰는 걸 막고, play처럼 공개된 메서드를 통해서만 활용 가능
- 이렇게 하면 클래스의 내부 로직(구현 세부사항)을 감춰, 필요한 부분만 외부 노출
🚀 3. 주의점
- 상속은 불가능하다
- 프라이빗 필드/메서드는 자식 클래스에서도 접근 불가능
- 완전히 클래스 내부에만 묶여 있음
- 문법 강제
- obj.#field, obj['#field'] 모두가 에러발생
- 디버깅 시도 접근 불가능 -> 보안성이 높다
- 프라이빗 필드는 "숨겨진 변수" 프라이빗 메서드는 "숨겨진 기능"
- 둘 다 클래스 내부에서만 접근이 가능해 캡슐화(encapsulation)를 제대로 구현 가능
GitHub - javascript-only/newJSRoom: https://thinky.tistory.com/category/Front-End/JavaScript
https://thinky.tistory.com/category/Front-End/JavaScript - javascript-only/newJSRoom
github.com
728x90
LIST
'Front-End > JavaScript' 카테고리의 다른 글
| [Javascript] New Javascript 13장 - BigInt(큰 정수 처리) (0) | 2025.09.12 |
|---|---|
| [Javascript] New Javascript 12장 정적 메서드/필드 (0) | 2025.09.12 |
| [Javascript] New Javascript 10장 모듈 시스템 (0) | 2025.09.08 |
| [Javascript] New Javascript 9장 클래스 문법 (0) | 2025.09.06 |
| [Javascript] New Javascript 8장 async/await (0) | 2025.08.30 |