Class contract

구현 공유가 필요하면 추상 클래스, 역할 조합이면 인터페이스다

상태와 기본 구현을 공유할지, 독립 역할을 여러 개 조합할지에서 선택이 갈린다.

질문판정
protected 상태나 생성자 초기화가 필요한가?추상 클래스
공통 검증이나 template method를 공유하는가?추상 클래스
직렬화, 로깅처럼 독립 역할인가?interface 다중 구현
데이터 형태만 제한하면 되는가?interface
기준해석
추상 클래스오래 유지될 공통 규칙에만 사용
인터페이스바뀌기 쉬운 구현과 소비자 계약 분리
판단상속 계층이 필요한지 먼저 묻는다

핵심 추상 클래스는 계층 비용이 있으므로 공통 구현의 가치가 분명할 때 쓰는 편이 좋다.