JavaScript에서 _ (언더스코어) 접두사는 일반적으로 'private' 또는 'protected' 속성을 나타내는 데 사용됩니다.
즉, 해당 속성은 클래스 외부에서 직접 접근하거나 수정하면 안 된다는 약속입니다.
JavaScript는 기본적으로 실제 private 속성을 지원하지 않기 때문에 이런 방식으로 표현합니다.
get과 set 메서드를 사용할 때 _를 사용하는 이유는, 무한 루프를 방지하기 위함입니다.
예를 들어 다음과 같은 클래스를 생각해보겠습니다:
class MyClass {
constructor() {
this.myProperty = 'value';
}
get myProperty() {
return this.myProperty;
}
set myProperty(newValue) {
this.myProperty = newValue;
}
}
위 코드에서 myProperty의 get 메서드는 자신을 호출하는 순간 무한 재귀에 빠지게 됩니다.
이는 get 메서드 내에서 this.myProperty를 반환하려 하면 get 메서드 자체가 다시 호출되기 때문입니다.
마찬가지로 set 메서드에서도 this.myProperty에 값을 할당하려 하면 set 메서드 자체가 무한히 호출됩니다.
따라서 우리는 실제 프로퍼티 값을 저장하는 별도의 변수가 필요하며, 이를 위해 _를 사용하는 것입니다.
이렇게 하면 get과 set 메서드는 _myProperty를 참조하고 변경할 수 있습니다:
class MyClass {
constructor() {
this._myProperty = 'value';
}
get myProperty() {
return this._myProperty;
}
set myProperty(newValue) {
this._myProperty = newValue;
}
}
이 방식은 우리가 myProperty를 '공개' API로 제공하면서
내부적으로는 _myProperty를 직접 조작하는 방법을 제공합니다.
이렇게 하면 클래스의 사용자는 속성 값을 가져오거나 설정하는 것만 신경 쓸 수 있으며,
클래스 내부에서는 이를 적절하게 관리할 수 있습니다.