타입스크립트의 클래스
class Employee {
// 필드
name: string;
age: number;
position: string;
// 생성자
constructor(name: string, age: number, position: string) {
this.name = name;
this.age = age;
this.position = position;
}
//메서드
work() {
console.log('일하는 중');
}
}
타입스크립트의 클래스는 자바스크립트의 클래스와 큰 차이는 없지만, 타입을 명시해줘야한다는 점의 차이점이 있다.
클래스 상속(확장)
class ExcutiveOfficer extends Employee {
//필드
officeNumber: number;
// 생성자
constructor(name: string, age: number, position: string, officeNumber: number) {
super(name, age, position);
this.officeNumber = officeNumber;
}
}
또한 클래스를 상속받을 수 있는데, 생성자에서 super 키워드로 기존 필드를 채워줘야한다.
접근 제어자
class Employee {
// // 필드
// private name: string;
// protected age: number;
// public position: string;
// // 생성자
// constructor(name: string, age: number, position: string) {
// this.name = name;
// this.age = age;
// this.position = position;
// }
// 자동필드 생성자
constructor(private name: string, protected age: number, public position: string) {
}
//메서드
work() {
console.log('일하는 중');
}
}
C#과 비슷한 타입스크립트는 마찬가지로 접근 제어자를 사용할 수 있는데, 필드 앞에 public,private,protected 를 사용할 수 있다.
조금 재밌는 점은 타입스크립트의 생성자에서 접근 제어자를 명시하면 필드에 해당 값이 자동으로 세팅되며, this.name = name 과 같은 행동을 자동으로 해준다.
그렇기 때문에 위의 코드처럼 생성자에서 명시하기만 하면 굳이 주석처리된 것처럼 길게 코드를 작성할 필요가 없다.
접근 제어자가 캡슐화를 위함은 알겠는데, 그럼 getter 같은 것은 따로 있나?
결론부터 얘기하면 있다. 아래 코드에서 getter를 확인해볼 수 있다.
class Example {
// 내부에서만 직접 접근 가능한 private 필드
private _data: string;
constructor(data: string) {
this._data = data;
}
// 외부에서는 읽기만 가능한 getter 정의
public get data(): string {
return this._data;
}
// 내부에서는 데이터를 수정할 수 있는 메서드 (또는 다른 로직)
public updateData(newData: string): void {
this._data = newData;
}
}
const example = new Example("초기값");
console.log(example.data); // "초기값"
// example.data = "변경값"; // Error: data는 읽기 전용이므로 직접 수정 불가
// 내부 메서드를 통해 값 변경 가능
example.updateData("변경값");
console.log(example.data); // "변경값"
구현 (implements)
/**
* 인터페이스와 클래스
*/
interface CharacterInterface {
name: string,
moveSpeed: number,
move(): void,
}
class Character implements CharacterInterface {
constructor(public name: string, public moveSpeed: number){}
move() {}
}
클래스는 구현이라는 것을 할 수 있는데, 위의 코드처럼 인터페이스와 같은 추상화를 반드시 구현하라고 명시적으로 지정할 수 있다.
extends 자리를 implements 로 대체하면 가능하다.
구현은 반드시 필드나 메서드 등을 구현해서 작성해야 한다.
'프로그래밍 > 타입스크립트' 카테고리의 다른 글
타입스크립트 - 제네릭 인터페이스 (0) | 2025.02.15 |
---|---|
타입스크립트 - 제네릭 함수 (0) | 2025.02.15 |
타입스크립트 - 인터페이스 (0) | 2025.02.14 |
타입스크립트 - 사용자 정의 타입 가드 (0) | 2025.02.14 |
타입스크립트 - 함수 오버로딩 (0) | 2025.02.14 |