공유 구현 찾기
여러 클래스가 같은 상태와 기본 메서드를 가진다면 부모 클래스 후보입니다.
`extends`와 `implements`는 함께 쓸 수 있지만, 하나는 구현 재사용을, 다른 하나는 역할 보장을 담당합니다.
여러 클래스가 같은 상태와 기본 메서드를 가진다면 부모 클래스 후보입니다.
서로 다른 계층이 같은 기능을 제공해야 한다면 인터페이스 후보입니다.
상속 단계가 깊어질수록 변경 영향이 커지므로 역할은 인터페이스로 빼냅니다.
공통 상태, 기본 구현, 오버라이드 지점이 모두 있을 때 사용합니다.
호출자가 필요한 메서드 모양을 보장하고 구현체는 자유롭게 바뀌어야 할 때 사용합니다.