[TypeScript] Set/Get, Protected, Private/Public/Static MembersLanguage/TypeScript2024. 4. 24. 23:39
Table of Contents
반응형
이번 글에서는 set/get, protected, private/public, static 멤버의 복잡한 기능에 대해 살펴보겠습니다. 이러한 기능은 타입스크립트 클래스 내에서 접근과 가시성을 제어하는 데 중요한 역할을 합니다. 멤버 가시성 및 접근 제어의 미묘한 차이를 살펴보고 강력하고 캡슐화된 코드 구조를 만드는 데 필요한 도구를 함께 살펴보세요.
1. Public, Private, and Protected Members
- Public:
public
으로 표시된 멤버는 클래스 외부에서 액세스할 수 있습니다.
class Car {
public model: string;
constructor(model: string) {
this.model = model;
}
}
const myCar = new Car('Kia');
console.log(myCar.model); // 접근 가능
- Private:
private
로 표시된 멤버는 클래스 내에서만 접근할 수 있습니다.
class Car {
private model: string;
constructor(model: string) {
this.model = model;
}
getModel(): string {
return this.model; // 클래스 내에서 접근 가능
}
}
const myCar = new Car('Toyota');
// console.log(myCar.model); // Error: 속성 'model'은 비공개이며 'Car' 클래스 내에서만 액세스할 수 있습니다.
console.log(myCar.getModel()); // 메서드를 통해 접근할 수 있습니다.
- Protected:
protected
으로 표시된 멤버는 클래스와 그 하위 클래스(파생 클래스) 내에서 액세스할 수 있습니다.
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.wheels); // Error: 'wheels' 속성은 보호되어 있으며 'Vehicle' 클래스와 그 하위 클래스 내에서만 접근할 수 있습니다.
console.log(myCar.getWheels()); // 메서드를 통해 액세스할 수 있습니다.
2. Getter and Setter
- Getter: private 속성의 값을 검색하는 데 사용됩니다.
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); // getter를 통해 접근 가능
- Setter: private 프로퍼티의 값을 업데이트하는 데 사용됩니다.
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); // 5
myCircle.radius = 7; // setter를 통해 설정합니다.
console.log(myCircle.radius); // 7
myCircle.radius = -3; // setter에 의해 무시됨
console.log(myCircle.radius); // 7
3. Static Members
정적 멤버는 클래스의 인스턴스가 아닌 클래스 자체에 속합니다.
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)); // 정적 메서드 호출하기
정적 멤버는 인스턴스를 생성하지 않고 클래스에서 직접 액세스할 수 있습니다.
결론
이러한 기능은 클래스의 내부 상태에 대한 액세스를 캡슐화하고 제어할 수 있는 방법을 제공하여 코드 구성과 유지보수성을 향상시킵니다. 각 멤버에 대해 원하는 캡슐화 수준과 가시성에 따라 적절한 접근 제어자를 선택하세요.
반응형
'Language > TypeScript' 카테고리의 다른 글
[TypeScript] Generic, Type Guard, Signature 및 Overload (3) | 2024.05.02 |
---|---|
[TypeScript] 고급 타입, 매핑된 타입, keyof/typeof (4) | 2024.04.30 |
[TypeScript] OOP 관행, 클래스 및 상속 (64) | 2024.04.22 |
[TypeScript] Any, Void, Never, Null, Strict Null Checks (2) | 2024.04.19 |
[TypeScript] Typing Functions and Signatures (1) | 2024.04.18 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!