추상 클래스 (Abstract Class)와 인터페이스
인터페이스(Interface)가 객체의 껍데기 형태만 100% 강제한다면, 추상 클래스(Abstract)는 "일부 공통 기능은 미리 구현해서 물려주고, 일부 핵심 기능만 자식들에게 강제로 구현시키는" 반자동 템플릿 역할을 합니다.
// "동물"이라는 막연한 개념을 직접 객체(new)로 만들지 못하게 미완성 설계도로 만듦
abstract class Animal {
name: string;
constructor(name: string) { this.name = name; }
// 소리를 내긴 하는데, 무슨 소리를 낼지는 자식들이 알아서 구현해라! (추상 메서드)
abstract makeSound(): void;
}
class Dog extends Animal {
// 부모가 물려준 미완성 숙제(abstract)를 무조건 구현해야만 에러가 안 남!
makeSound() {
console.log("멍멍!");
}
}