상속은 코드를 재사용할 수 있는 강력한 수단이지만, 잘못 사용하면 객체의 유연성을 해치는 결과를 초래합니다.
(클래스가 다른 클래스를 확장하는 구현상속을 의미, 클래스가 인터페이스를 구현하거나 인터페이스끼리 확장하는 인터페이스 상속은 제외)
컴포지션을 사용하면 개발자가 원하는 메서드만 클라이언트에게 공개할 수 있고, 상위 클래스 내부를 숨겨 캡슐화를 해치지 않을 수 있습니다.
상속으로 클래스 세트를 구성해보고, 이를 컴포지션으로 수정하여 보세요.
Decorator 디자인 패턴을 적용할 수 있으면 더 좋습니다...!