이번 글에서는 set/get, protected, private/public, static 멤버의 복잡한 기능에 대해 살펴보겠습니다. 이러한 기능은 타입스크립트 클래스 내에서 접근과 가시성을 제어하는 데 중요한 역할을 합니다. 멤버 가시성 및 접근 제어의 미묘한 차이를 살펴보고 강력하고 캡슐화된 코드 구조를 만드는 데 필요한 도구를 함께 살펴보세요.
1. Public, Private, and Protected Members
Public: public
으로 표시된 멤버는 클래스 외부에서 액세스할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 class Car { public model: string ; constructor (model: string ) { this .model = model; } } const myCar = new Car('Kia' );console .log(myCar.model);
Private: private
로 표시된 멤버는 클래스 내에서만 접근할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Car { private model: string ; constructor (model: string ) { this .model = model; } getModel(): string { return this .model; } } const myCar = new Car('Toyota' );console .log(myCar.getModel());
Protected: protected
으로 표시된 멤버는 클래스와 그 하위 클래스(파생 클래스) 내에서 액세스할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Vehicle { protected wheels: number ; constructor (wheels: number ) { this .wheels = wheels; } } class Car extends Vehicle { constructor (wheels: number ) { super (wheels); } getWheels(): number { return this .wheels; } } const myCar = new Car(4 );console .log(myCar.getWheels());
2. Getter and Setter
Getter: private 속성의 값을 검색하는 데 사용됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Circle { private _radius: number ; constructor (radius: number ) { this ._radius = radius; } get radius(): number { return this ._radius; } } const myCircle = new Circle(5 );console .log(myCircle.radius);
Setter: private 프로퍼티의 값을 업데이트하는 데 사용됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class Circle { private _radius: number ; constructor (radius: number ) { this ._radius = radius; } get radius(): number { return this ._radius; } set radius(newRadius: number ) { if (newRadius > 0 ) { this ._radius = newRadius; } } } const myCircle = new Circle(5 );console .log(myCircle.radius); myCircle.radius = 7 ; console .log(myCircle.radius); myCircle.radius = -3 ; console .log(myCircle.radius);
3. Static Members
정적 멤버는 클래스의 인스턴스가 아닌 클래스 자체에 속합니다.
1 2 3 4 5 6 7 8 9 10 11 class MathOperations { static PI: number = 3.14159 ; static calculateCircumference(radius: number ): number { return 2 * this .PI * radius; } } console .log(MathOperations.PI); console .log(MathOperations.calculateCircumference(5 ));
정적 멤버는 인스턴스를 생성하지 않고 클래스에서 직접 액세스할 수 있습니다.
결론
이러한 기능은 클래스의 내부 상태에 대한 액세스를 캡슐화하고 제어할 수 있는 방법을 제공하여 코드 구성과 유지보수성을 향상시킵니다. 각 멤버에 대해 원하는 캡슐화 수준과 가시성에 따라 적절한 접근 제어자를 선택하세요.