상속은 코드 재사용의 좋은 방법이지만, 사용에 주의해야 하는 단점들이 있다.
상속을 통한 재사용의 단점
상속에는 다음과 같은 단점들이 있다:
- 상위 클래스의 변경이 어렵다.
- 클래스의 갯수가 증가한다.
- 상속을 오용할 가능성이 있다.
대안은 무엇인가?
상속 대신에 조립(Composition over inheritance)을 활용해 보는 것이 좋다. 상속은 진짜 하위 타입인 경우에만 사용하는 것이 바람직하다.
조립을 통한 기능 재사용
다음의 자바 코드는 조립을 통한 기능 재사용의 예이다. ArrayList
를 상속받는 대신에, ArrayList
를 멤버 변수로 가지고 있는 Container
클래스를 생성한다.
public class Container {
private int maxSixe;
private int currentSize;
private List<Luggage> luggages = new ArrayList();
...
public void put(Luggage lug){
if (!canContain(lug)){
throw new NotEnoughSpaceException();
}
luggages.add(lug);
}
...
}