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
반응형
'개발관련 > other' 카테고리의 다른 글
Docker 컨테이너 내부에서 머신의 로컬 호스트에 연결하는 방법 (0) | 2021.12.07 |
---|---|
UIViewController의 뷰가 보이는지 확인하는 방법 (0) | 2021.12.07 |
PowerShell 여러 줄 명령을 입력하는 방법 (0) | 2021.12.06 |
Visual Studio Code 확장 목록을 내보내는 방법 (0) | 2021.12.06 |
Sublime에서 변수의 모든 인스턴스를 선택하고 변수 이름을 편집하는 방법 (0) | 2021.12.06 |