Class Contract

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

설계 선택은 문법 취향보다 상태와 기본 구현을 공유할지, 여러 역할을 동시에 만족해야 하는지에서 갈린다.

선택 지도

oop type

공통 상태가 있는가?

protected 상태나 생성자 초기화가 필요하면 추상 클래스로 묶는다.

기본 구현을 공유하는가?

템플릿 메서드와 공통 검증은 abstract 메서드와 함께 둔다.

여러 역할을 합치는가?

직렬화, 로깅, 비교 가능처럼 독립 역할은 interface 다중 구현이 낫다.

값 모양만 필요한가?

DTO와 설정 객체처럼 데이터 형태만 제한하면 interface로 충분하다.

state reuse role contract
실전 기준

추상 클래스는 상속 계층을 만들기 때문에 오래 유지될 공통 규칙에만 쓰고, 가벼운 능력 표현은 인터페이스로 분리한다.