상속은 코드를 재사용하는 강력한 수단이다. 하지만 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 한다.메서드 상속과 달리 상속은 캡슐화를 깨트린다. - 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. - 상위 클래스는 릴리스마다 내부 구현이 달라질 수 있으며, 그 여파로 코드 한 줄 건드리지 않은 하위 클래스가 오동작할 수 있다.상속의 단점을 피하기 위해 새로운 메서드를 통해 재정의하는 것은 상위 클래스의 메서드가 요구하는 규약을 만족하지 못할 가능성이 크다.위 문제점을 해결하기 위해서는 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하게 하는 컴포지션(composition)을 사용하자.컴포지션을 사용하면, 기존 클래스의 내부 구현 방식..