JavaScript에서 class
키워드를 사용하여 클래스를 정의할 때 this._
와 private
키워드는 둘 다 정보 은닉과 관련이 있지만 약간 다른 방식으로 동작합니다.
this._
:this._
는 관례적으로 private 멤버 변수를 나타냅니다. 즉, 다른 클래스나 외부에서 직접 접근하지 않는 것으로 간주되지만, JavaScript에서는 엄격한 의미의 private이 아니라 외부에서도 접근할 수 있습니다._
로 시작하는 변수는 개발자 간의 약속으로, 해당 변수나 메서드에 직접 접근하지 말아야 함을 나타냅니다. 이는 접근을 시도할 때 경고를 주거나 문서화할 수 있는 등의 추가적인 조치가 필요합니다.예를 들어:
class Example {
constructor() {
this._privateVariable = 10;
}
getPrivateVariable() {
return this._privateVariable;
}
setPrivateVariable(value) {
this._privateVariable = value;
}
}
const example = new Example();
console.log(example.getPrivateVariable()); // 10
example.setPrivateVariable(20);
console.log(example.getPrivateVariable()); // 20
private
키워드:private
키워드는 ECMAScript 2022의 클래스 필드 선언 문법의 일부로 도입되었습니다. 이를 사용하면 클래스 내에서만 접근할 수 있는 실제 private 멤버를 정의할 수 있습니다.private
키워드로 정의된 멤버는 클래스 외부에서 접근할 수 없으며, 직접적인 접근 시 SyntaxError가 발생합니다.예를 들어:
class Example {
#privateVariable = 10;
getPrivateVariable() {
return this.#privateVariable;
}
setPrivateVariable(value) {
this.#privateVariable = value;
}
}
const example = new Example();
console.log(example.#privateVariable); // SyntaxError: Private field '#privateVariable' must be declared in an enclosing class
따라서, this._
는 일종의 관례적인 private 변수이지만 JavaScript에서 진정한 private이 아니며, private
키워드는 실제로 클래스 내부에서만 접근할 수 있는 private 멤버를 정의하는 데 사용됩니다.