공통 상태가 있는가?
protected 상태나 생성자 초기화가 필요하면 추상 클래스로 묶는다.
설계 선택은 문법 취향보다 상태와 기본 구현을 공유할지, 여러 역할을 동시에 만족해야 하는지에서 갈린다.
protected 상태나 생성자 초기화가 필요하면 추상 클래스로 묶는다.
템플릿 메서드와 공통 검증은 abstract 메서드와 함께
둔다.
직렬화, 로깅, 비교 가능처럼 독립 역할은 interface 다중 구현이 낫다.
DTO와 설정 객체처럼 데이터 형태만 제한하면 interface로 충분하다.
추상 클래스는 상속 계층을 만들기 때문에 오래 유지될 공통 규칙에만 쓰고, 가벼운 능력 표현은 인터페이스로 분리한다.