상속
-
부모 클래스의 속성 및 동작을 상속하는 기능
-
중복되는 내용을 제거할 수 있다.
-
하지만 결합도를 높일 수도 있다 .
- 자식 클래스는 부모 클래스의 구현에 의존하고 있기 때무에 부모 클래스의 변경에 영향을 많이 받는다.
- 상위 클래스의 내부 구현을 알아야지만 하위 클래스를 제대로 사용할 수 있다.
- 캡슐화 위반
- 설계가 유연하지 않다.
-
상속은 적절한 경우에만 사용해야 한다.
- is a 관계
- 상속으로 인해 내부 구현을 불필요하게 노출하고 있지 않아야 한다.
- 확장하는 클래스의 결함이 부모 클래스까지 전파되어도 괜찮아야 한다.
합성(composition)
- has a 관계
- 다른 클래스의 객체를 포함하는 기능
- 상속의 단점을 피하면서도 코드를 재사용할 수 있는 방법
- 내부에 포함되는 객체의 구현이 아닌 인터페이스에만 의존하게 된다.
- 인터페이스 의존에 따른 결합도를 낮출 수 있다.
- 런타임 의존성(컴파일 타임에 어떠한 구체 클래스에 의존하지 않는다)
참고