[최범균님 디자인 패턴] 객체지향과 디자인 패턴 : 상속보다 조립을

상속은 상위 클래스에 구현된 기능을 그대로 손쉽게 재사용할 수 있지만 몇 가지 문제점이 있다.

재사용 관점에서 상속을 대체할 수 있는 객체 조립 방식이 잇다.

상속과 재사용

상속을 통한 재사용의 단점 1. 상위 클래스의 변경의 어려움

구현을 일부 변경했거나 일부 메서드의 시그니처를 변경했을 때
변경에 대한 여파가 계층도를 따라 하위 클래스에 전파된다

계층도가 커질 수록 상위 클래스를 변경하는 것은 점점 어려워진다

상속을 통한 재사용의 단점 2. 클래스의 불필요한 증가

다중 상속을 할 수 없는 자바에서는 한 개의 클래스만 상속받을 수 있다

필요한 기능의 조합이 증가할 수록 클래스의 개수는 기하급수적으로 증가하게 된다 (n개의 클래스에 대하여 2^(n-1))

상속을 통한 재사용의 단점 3. 상속의 오용

IS-A 관계가 아닐때 사용하면 의도한 방식과 맞지 않게 동작한다 !

예) List의 add, Luggage의 put 을 API를 사용하는 클라이언트는 알 수 없다

조립을 이용한 재사용

  • 이해가 잘 안됀다… 다시 읽어보자 !

위임 (delegation)

  • 위임 : 내가 할 일을 다른 객체에게 넘긴다
    • 조립 방식을 이용해서 위임을 구현한다
      • 조립: 더 구체적인 방법
      • 위임: 논리적인 방법

상속은 언제 사용하니?

재사용의 관점이 아닌 기능의 확장이라는 관점에서 상속을 적용해야 한다

명확한 IS-A 관계가 성립되어야 한다.

그외

정사각형-직사각형 문제

  • 원-타원 문제

스프링이 추상 클래스에서 인터페이스로 옮기고 있다

내부 변수/상수가 있을 때는 인터페이스 보다 추상 클래스를 사용한다…?





© 2020.12. by 따라쟁이

Powered by philz