호의는 두 후보가 모두 자격을 갖추면 발생합니다. 질문에 명시된 문제는 구성 옵션 만 있기 때문에이 계정에서 실패합니다.
"구성도 일반화를 사용할 수 있습니다." 이 말이 우리에게 의미가 있습니까? 그렇지 않다면 아직 '선호'규칙을 파악할 준비가되지 않은 것입니다.
컴포지션을 선호하는 이유는 컴포지션이 일반화보다 더 많은 확장 / 유연성 가능성을 제공하기 때문입니다. 이 확장 성 / 유연성은 대부분 런타임 / 동적 유연성 (인터페이스와 컴포지션의 조합으로 달성 됨)을 나타냅니다.
이점은 즉시 보이지 않습니다. 이점을 보려면 다음 예기치 않은 변경 요청을 기다려야합니다. 따라서 대부분의 경우 구성을 받아 들인 사람들과 비교할 때 일반화를 고수하는 사람들은 실패합니다 (나중에 언급 한 명백한 경우 제외). 따라서 규칙. 학습 관점에서 의존성 주입을 성공적으로 구현할 수 있다면 어느 것을 선호하고 언제 사용해야하는지 알아야합니다. 어떤 규칙을 선택해야할지 확실하지 않은 경우 규칙을 통해 결정을 내릴 수 있습니다. 다시 한 번에 두 가지 옵션을 모두 볼 수 있어야합니다.
요약 : 구성 : 더 작은 것을 더 큰 것으로 연결하면 커플 링이 줄어들고 더 큰 객체는 더 작은 객체를 다시 호출합니다. 생성 : 써드 파티 API 관점에서 메소드를 대체 할 수 있음을 정의하는 것은 메소드를 호출 할 수 있음을 정의하는 것보다 더 강력한 약속입니다 (일반화의 승리). 그리고 컴포지션을 사용하면 큰 클래스 대신 인터페이스에서 일반화도 사용한다는 것을 잊지 마십시오. 그러나 전체 크레딧은 불행히도 구성에 사용됩니다.