FrontEnd/Javascript(Vanilla)
클래스에서 private 필드를 나타내는 기호 #와 _의 차이는 무엇인가?
Bumang
2024. 4. 7. 03:41
들어가기 전 토막 상식
보통 클래스 안의 정보들은 프로퍼티가 아니라 필드라고 한다.
계속 프로퍼티라 부르고 있었는데 클래스 문법 복습하면서 다시 알게 되었다.
_가 붙는 필드는 무엇인가?
class Counter {
constructor() {
this._count = 0; // _count는 내부적으로 사용되는 프로퍼티
}
increment() {
this._count++;
}
getCount() {
return this._count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 외부에서는 getCount를 통해서만 _count에 접근할 수 있음
JavaScript 클래스 문법에서 _ (언더스코어)로 시작하는 프로퍼티는
주로 해당 클래스의 내부에서만 사용되는 프로퍼티를 나타낸다.
이러한 네이밍 컨벤션은 해당 프로퍼티가 클래스 외부에서 직접적으로 접근되어선 안 된다는 것을 의미한다.
이것은 JavaScript에서는 엄격한 접근 제어를 제공하지 않기 때문에
개발자들이 코드를 더 안전하게 유지하기 위해 사용하는 관습적인 방법 중 하나였다.
_필드의 용도:
1. 내부 구현에 필요한 데이터를 저장하기 위한 것으로, 외부에서 직접 접근하면 안 되는 데이터를 나타낸다.
2. 외부에 공개되지 않아야 하는 메서드나 변수를 나타낸다.
3. 클래스의 인터페이스를 의미적으로 명확히 하기 위해 사용될 수 있다.
#을 붙여서 private로 만들면 되는거 아닌가?
맞다. JavaScript에서는 2022년 11월에 공개된 ECMAScript 2022(ES12)부터 #을 사용하여 클래스 필드를 private로 만드는 기능이 도입되었다. 이것은 클래스 외부에서 직접적으로 접근할 수 없도록 보호하는 데 사용된다. 이전에는 _을 사용하여 private 프로퍼티를 표시하는 것이 일반적이었지만, #을 사용하는 것이 더 견고한 방법이다.
class Counter {
#count = 0; // private 필드
increment() {
this.#count++;
}
getCount() {
return this.#count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 클래스 외부에서 getCount를 통해서만 #count에 접근할 수 있음
요약
#과 _은 모두 JavaScript에서 private 프로퍼티나 메서드를 나타내는데 사용될 수 있다.
그러나 #은 더 최신의 문법이며, ECMAScript 2022(ES12)에서 도입되었다.
반면에 _은 개발자들이 이전에 private 프로퍼티를 나타내는데 주로 사용해온 관습적인 방법이다.