최근 JS의 class에서 private 접근자를 지원한다는 것을 알게 되었습니다. 그전에는 밑줄(_)로 시작하는 필드와 매서드가 private라는 강제성이 없는 방식으로 해왔는데요. 아래는 #width와 #height 필드 그리고 #getArea 매서드가 private 접근자의 성격을 갖습니다.
class Rectangle { #width = 10; #height = 10; constructor(height, width) { this.#width = width; this.#height = height; } #getArea() { return this.#width * this.#height; } get area() { return this.#getArea(); } }
이제 아래의 코드는 에러입니다.
const rec = new Rectangle(10, 10); console.log(rec.#width);
에러의 내용도 명확히 “Private field ‘#width’ …”라고 되어 있습니다.
그러나 Rectangle에 width라는 필드를 추가할 수 있는데, 이 width는 public입니다. #width와는 별개이구요. 혼란스럽습니다. 게다가 아직 protected 접근자는 제공하지도 않습니다.
웹에서의 객체지향적 프로그래밍을 위해서는 아직까지 TypeScript가 강력한 대안으로 생각됩니다.