인터페이스(Interface)가 객체의 껍데기 형태만 100% 강제한다면, 추상 클래스(Abstract)는 "일부 공통 기능은 미리 구현해서 물려주고, 일부 핵심 기능만 자식들에게 강제로 구현시키는" 반자동 템플릿 역할을 합니다.
실행해보기
아래의 코드는 Minstudio의 엔진을 통해 브라우저 상에서 타입스크립트로 변환되어 실행된 결과입니다. 하단의 Developer Console 창에서 console.log의 출력을 직접 확인해보세요!
// 1. 추상 클래스 선언 (abstract 키워드 사용)
abstract class Animal {
// 일반 메서드: 자식들이 공통으로 쓸 수 있게 구현까지 해둠
move(): void {
console.log("이동합니다... 뚜벅뚜벅");
}
// 추상 메서드: 껍데기만 두고, "자식아 네가 무조건 구현해!" 라고 강제함
abstract makeSound(): void;
}
// 2. 자식 클래스가 추상 클래스를 상속 (extends)
class Dog extends Animal {
// 부모가 강제한 추상 메서드를 여기서 무조건 구현해야 함!
makeSound(): void {
console.log("멍멍!");
}
}
// 3. 실행해보기
// const animal = new Animal(); // ❌ 에러! 추상 클래스는 직접 new로 생성 불가
const myDog = new Dog();
myDog.move(); // 부모가 물려준 일반 기능
myDog.makeSound(); // 자식이 직접 구현한 핵심 기능