클래스 계약

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

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

구현 공유가 필요할 때는 추상 클래스

oop type

공통 상태 보유 여부

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

기본 구현을 공유하는 여부

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

여러 역할을 합치는 여부

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

값 구조 기준

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

state reuse role 계약
실전 기준

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