JavaScript에 Private이 있다?

5192 단어 JavaScriptJavaScript

없는거 아니에요?


저도 그런줄 알았는데 알고 보니 stage 4 proposal이 었습니다.

쨔자잔!

class ClassWithPrivateField {
  #privateField;

  constructor() {
    this.#privateField = 42;
    this.#undeclaredField = 444; // Syntax error
  }

  #privateMethod() {
    return 'hello world';
  }

  getPrivateMessage() {
    return this.#privateMethod();
  }
}

const instance = new ClassWithPrivateField()
instance.#privateField === 42;   // Syntax error
console.log(instance.getPrivateMessage());

class 문법을 사용할때 필드나 메서드 앞에 해시태그를 붙여주면 된다.

예전에는 오또캐 구현 했나요?

옛날에도 private이 필요하긴 했을 텐데 어떻게 했는지 간략하게 알아보자.

언더스코어 컨벤션

function Constructor() {
  this._privateField = 'cant touch this';
  this.publicField = 'touch this'
}

멤버 명에 언더스코어를 추가하면 외부에서 접근하면 안된다는 컨벤션이 흔히 사용 되었다. 가독성도 좋고 간단하지만, 실제로 private 않다는 문제가 있다.

클로저로 은닉

function Constructor() {
  const privateField = 'cant touch this';
  this.publicField = 'touch this';
};

const instance = new Constructor();

instance.privateField // undefined

다소 헷갈리지만, 클로저를 통해 은닉할 수 있다. 클로저의 대표적인 활용 방법이지만 다소 헷갈리고 this까지 더해지면 가독성이 다소 낮아진다고 생각한다.

좋은 웹페이지 즐겨찾기