"Abstract 가 '나 쓰려면 extend 해야 함' 말하는 class."
`abstract` 가 뭐 함
abstract class Base { ... } 가 직접 instantiate 못 하는 class 선언. new Base() 가 compile 에러 — 먼저 extend 해야. Abstract class 가 template: 공유 구조와 부분 구현 묘사, 구체는 subclass 에 남김.
Abstract class 가 abstract method(): T 선언 가능 — body 없는 method signature. 구체 subclass 가 구현해야 함. Compile 시점에 강제되는 '이건 너가 제공해야 할 method' 의 type-system 버전.
Abstract 손 뻗을 때
Abstract class 가 자기 몫 할 때:
- 타입 family 가로질러 공유 state 와 행동 있을 때.
- Subclass 가 특정 method 구현해야 하는데 나머지 대부분 재사용.
- Base 의 직접 instantiation 금지하고 싶을 때.
Contract 만 필요하면 (공유 state 없음, 공유 구현 없음), `interface` 써 — 더 가벼움. Abstract class 는 interface 만으론 부족할 때용.
Abstract vs interface
둘 다 contract 묘사. Abstract class 가 구현도 제공. 경험 법칙: 코드 공유 필요하면 abstract. 모양만 공유 필요하면 interface. 많은 codebase 가 둘 다 써 — interface 가 contract 묘사, abstract class 가 그 contract 의 공통 행동 구현.
Abstract 가 '이건 contract' 와 '이건 부분-빌드된 class' 의 선. 아껴서 써 — TypeScript 의 대부분 contract 가 interface 에 살아. Contract 가 공유 구현도 포함할 때 abstract 손 뻗어.