Front-end/JavaScript

JS OOP 5편 - Class private 문법(#)

파리외 개발자 2023. 2. 14. 23:55

ES2022부터 클래스에 private도입이 정식스펙으로 도입되었다.

Private

이전엔 IIFE 등으로 클래스 내부의 자원을 외부로부터 개입하지 못하도록 막았지만

이제는 #을 통해 private으로 설정하면 변수와 메서드를 외부에서 접근하지 못하도록 할 수 있다.

//ES2022 private class
class Employee {
  #name = "Test"; //private field

  constructor(name) {
    this.#setName(name); //ok
  }

  #setName(name) {
    //private method
    this.#name = name;
  }

  sayName() {
    return this.#name;
  }
}

const emp = new Employee("New"); //ok
emp.#name = "New"; //err
emp.#setName("New"); //err
emp.sayName(); //New

#이 붙은 name변수와 setName메서드는 외부에서 접근이 안된다.

name변수는 처음 인스턴스를 생성할 때만 생성자를 통해

값을 할당할 수 있고 그 이후에는 setName, name에 접근할 수 없기 때문에,

임의로 변경할 수 없다.

접근할 수 있는 메서드는 sayName이 유일하며

private기능을 #을 통해 간단하게 구현하여

외부로부터 클래스 내의 접근제한을 할 수 있다.