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기능을 #을 통해 간단하게 구현하여
외부로부터 클래스 내의 접근제한을 할 수 있다.
'Front-end > JavaScript' 카테고리의 다른 글
JS FP 1편 - side effect (0) | 2023.02.16 |
---|---|
JS OOP 6편 - 다형성(Polymorphism) (0) | 2023.02.15 |
JS OOP 4편 - extends(JS 클래스 상속) (0) | 2023.02.13 |
JS OOP 3편 - this 바인딩(new, implicit, explicit, arrow) (0) | 2023.02.12 |
JS OOP 2편 - Class (0) | 2023.01.29 |