Class contract
구현 공유가 필요하면 추상 클래스, 역할 조합이면 인터페이스다
상태와 기본 구현을 공유할지, 독립 역할을 여러 개 조합할지에서 선택이 갈린다.
| 질문 | 판정 |
|---|---|
| protected 상태나 생성자 초기화가 필요한가? | 추상 클래스 |
| 공통 검증이나 template method를 공유하는가? | 추상 클래스 |
| 직렬화, 로깅처럼 독립 역할인가? | interface 다중 구현 |
| 데이터 형태만 제한하면 되는가? | interface |
| 기준 | 해석 |
|---|---|
| 추상 클래스 | 오래 유지될 공통 규칙에만 사용 |
| 인터페이스 | 바뀌기 쉬운 구현과 소비자 계약 분리 |
| 판단 | 상속 계층이 필요한지 먼저 묻는다 |
핵심 추상 클래스는 계층 비용이 있으므로 공통 구현의 가치가 분명할 때 쓰는 편이 좋다.