공통 구현 여부
부모의 코드와 상태를 실제로 재사용해야 하면 extends를 검토한다.
inherit behavior클래스 설계에서 extends와 implements의 차이는 재사용 vs 계약보다 더 깊다. override 안전성, abstract 멤버, 다중 계약, 구조적 타입 호환성을 함께 봐야 한다.
부모의 코드와 상태를 실제로 재사용해야 하면 extends를 검토한다.
inherit behavior동일한 메서드 형태만 요구하면 interface implements가 더 느슨하고 안전하다.
구조적 계약일부 구현은 공유하고 일부는 자식이 채워야 하면 abstract class를 사용한다.
template method부모 메서드를 바꿀 때 시그니처와 의미가 깨지지 않는지 확인한다.
LSP