여러 하위 클래스에 공통 로직을 제공하면서 일부 동작만 강제하고 싶을 때 추상 클래스 + 추상 메서드를 선택한다.
공통 로직이 없고 계약(contract)만 정의하면 충분할 때는 Interface를 선택한다.
Synapse Map Insight
abstractclassShape{// 추상 메서드 — 구현 없음, 하위 클래스 강제 구현abstractgetArea():number;// 일반 메서드 — 공통 로직 제공describe():string{return`이 도형의 넓이는 ${this.getArea()}입니다.`;}}classCircleextendsShape{constructor(private radius:number){super();}// 추상 메서드 반드시 구현 — 미구현 시 컴파일 에러getArea():number{return Math.PI*this.radius **2;}}classRectangleextendsShape{constructor(private width:number,private height:number){super();}getArea():number{returnthis.width *this.height;}}const circle =newCircle(5);console.log(circle.describe());// 이 도형의 넓이는 78.53...입니다.
// Interface — 모든 메서드가 추상, 구현 없음, abstract 키워드 불필요interfaceDrawable{draw():void;}// Abstract Class — 추상/일반 메서드 혼재 가능abstractclassBaseRenderer{abstractrender():void;// 반드시 구현init(){// 공통 초기화 로직 제공console.log('렌더러 초기화');}}