01 타입스크립트 소개
02 ECMAScript
03 타입스크립트 기초 문법
04 인터페이스와 클래스
05 타입의 호환성
06 타입 시스템 심화
07 고급 타입
08 모듈과 네임스페이스
09 실제 프로젝트에서 사용하기
10 유용한 라이브러리 소개
부록 II : 자바스크립트 언어 생태계

4.6.4 추상 클래스

class 키워드 대신 abstract class 키워드를 사용해 추상 클래스를 선언할 수 있다. 일반 클래스는 extends 키워드를 사용해 추상 클래스를 확장할 수 있다. 추상 클래스는 인스턴스화가 불가능하다는 점에서 일반 클래스와 다르다. 또한 추상 클래스는 구현을 일부 포함할 수 있다는 점에서 인터페이스와 다르다. 공식 문서의 예제를 보자.

abstract class Animal {
move(): void {
console.log("roaming the earth...");
}
abstract makeSound(): void;
}

abstract class 키워드를 이용해 정의된 추상 클래스 Animal은 두 멤버를 갖는다. 먼저 move 메소드는 일반 클래스 메소드와 동일하다. 한 편, abstract 키워드가 앞에 붙어 있는 makeSound가상 메소드(abstract method)로, 타입 정보 이외의 실제 구현은 포함하지 않고 있다.

가상 클래스를 확장하는 서브 클래스는 슈퍼 클래스의 모든 가상 메소드를 구현해야 한다. 만약 이 예시에서 Animal을 확장하는 일반 클래스가 makeSound 메소드를 올바르게 구현하지 않는다면 타입 에러가 발생한다.

class Dog extends Animal { }
// error TS2515: Non-abstract class 'Dog' does not implement inherited abstract member 'makeSound' from class 'Animal'.