[아이템 18] 상속보다는 컴포지션을 사용하라

캡슐화를 깨는 상속을 지양하자. 상위 클래스가 릴리즈마다 변경될 경우 상속받는 하위클래스도 변경되어야하고 상위 클래스의 구현 방식에 따라 하위 클래스의 동작에 이상이 생길 수도 있다. 다음 릴리즈에 새로운 메서드가 추가될 때 하위 클래스에서 재정의하지 못한 새로운 메서드를 통해 '잘못된'객체를 컬렉션에 넣을 수 있다. 메서드 재정의가 아닌 새로운 메서드를 추가할 경우에도 다음 릴리즈에 상위 클래스에 하위 클래스에서 추가한 메서드와 시그니처가 같고 반환 타입이 다르면 하위 클래스는 컴파일되지 않는다. 동일한 메서드를 재정의한게 되더라도 상위 클래스의 메서드 규약을 만족하지 못할 가능성이 있다. 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하게 하는 컴포지션을 사용하자. comp..