인터페이스와 상속을 구분하는 기준
재사용을 위해 상속을 고르기 전에, 타입 사이의 관계가 정말 부모와 자식인지부터 확인한다.
상속과 인터페이스는 모두 코드를 재사용하게 해주지만, 재사용은 둘의 목적이 아니다. 중요한 질문은 한 타입이 다른 타입의 본질적인 종류인가, 아니면 단지 같은 약속을 지키는가에 가깝다.
관계를 먼저 문장으로 바꿔본다
“고양이는 동물이다”처럼 자연스럽게 읽히면 상속을 검토할 수 있다. 반대로 “결제기는 결제할 수 있다”처럼 행동의 약속을 말한다면 인터페이스가 더 오래 버틸 가능성이 높다.
미래의 변경 방향을 상상한다
상속은 부모의 상태와 구현을 함께 끌어온다. 부모의 변경이 자식에게 전파되어도 괜찮은 관계인지, 여러 역할을 동시에 가져야 하는지 생각하면 선택이 조금 선명해진다.
결국 기준은 문법이 아니라 결합의 방향이다. 오늘 편한 선택보다 내일 바뀌어도 설명 가능한 관계를 남기는 쪽을 택한다.