프론트엔드 개발/Typescript

[TypeScript] 타입스크립트 추상 클래스

하이고니 2023. 3. 7. 16:09

 

 

클래스 선언 시 때로는 일부 메서드의 구현을 선언하지 않고, 하위 클래스가 해당 메서드를 제공할 것을 예상할 수도 있다. 

추상화하려는 클래스 이름과 메서드 앞에 타입스크립트의 abstract 키워드를 추가한다. 이러한 추상화 메서드 선언은 추상화 기본 클래스에서 메서드의 본문을 제공하는 것을 건너뛰고, 인터페이스와 동일한 방식으로 선언된다.

 

abstract class School {
  readonly name: string;

  constructor(name: string) {
    this.name = name;
  }

  abstract getStudentTypes(): string[];
}

class Preschool extends School {
  getStudentTypes() {
    return ["preschooler"];
  }
}

class Absence extends School { }
//    ~~~~~~~
// Error: Nonabstract class 'Absence' does not implement
// inherited abstract member 'getStudentTypes' from class 'School'.

 

추상 클래스는 인스턴스화 할 수 없다.

 

let school: School;
school = new Preschool("피노키오 유치원");  // ㅇㅋ
school = new School("몰라몰라학교");
//      ~~~~~~~~~~~~~~~~~~~~~~~
// Error: Cannot create an instance of an abstract class.

 

추상 클래스는 클래스의 세부 사항이 채워질 거라고 예상되는 프레임워크에서 자주 사용된다. 추상 클래스는 위 예제에서처럼 타입 애너테이션으로 사용할 수 있다. 그러나 새 인스턴스를 생성하려면 하위 클래스를 사용해야 한다.