개발관련/other

상속성보다 컴포지션을 선호하는 이유

Rateye 2021. 12. 7. 10:09
728x90
반응형
질문 : 상속보다 구성을 선호하십니까?

상속보다 구성을 선호하는 이유는 무엇입니까? 각 접근 방식에는 어떤 절충점이 있습니까? 언제 구성보다 상속을 선택해야합니까?

답변

상속성보다 컴포지션을 선호하는 이유는 나중에 수정하기 쉽기 때문입니다. 그러나 항상 compose-always 접근 방식을 사용하지 마십시오. 컴포지션을 사용하면 종속성 주입 / 세터를 사용하여 즉시 동작을 쉽게 변경할 수 있습니다. 상속은 대부분의 언어가 둘 이상의 유형에서 파생되는 것을 허용하지 않기 때문에 더 엄격합니다. 따라서 TypeA에서 파생되면 거위가 다소 조리됩니다.

위의 내 산성 테스트는 다음과 같습니다.

  • TypeB가 TypeA가 예상되는 곳에 TypeB를 사용할 수 있도록 TypeA의 완전한 인터페이스 (모든 공용 메서드)를 노출하려고합니까? 상속을 나타냅니다.
    • 예를 들어 Cessna 복엽기는 비행기의 완전한 인터페이스를 노출합니다. 그래서 비행기에서 파생하는 데 적합합니다.
  • TypeB는 TypeA에 의해 노출되는 동작의 일부 / 일부를 원합니까? 작곡의 필요성을 나타냅니다.
    • 예를 들어 새는 비행기의 비행 동작 만 필요합니다. 이 경우 인터페이스 / 클래스 / 둘 다로 추출하여 두 클래스의 구성원으로 만드는 것이 합리적입니다.

 

업데이트 : 방금 내 대답으로 돌아 왔고 이제는 Barbara Liskov의 Liskov Substitution Principle 을 '이 유형에서 상속해야합니까?'에 대한 테스트로 구체적으로 언급하지 않으면 불완전한 것 같습니다.

출처 : https://stackoverflow.com/questions/49002/prefer-composition-over-inheritance
728x90
반응형