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기능을 #을 통해 간단하게 구현하여
외부로부터 클래스 내의 접근제한을 할 수 있다.