Decorator Pattern
객체에 동적으로 새로운 책임을 추가할 수 있게 한다. 상속을 사용하지 않고도 객체의 기능을 확장할 수 있다. Motivation 어떤 기능을 추가하려면 기존 클래스를 계속 수정해야 하므로 OCP 원칙을 위반하게 된다. 즉, 새로운 기능을 추가할 때마다 새로운 클래스를 만들어야 한다. 데코레이터 패턴을 적용하면 기능을 동적으로 추가할 수 있으며, 코드의 재사용과 확장성이 증가한다. Applicability 동적이며 투명하게, 즉 다른 객체에 영향을 주지 않고 개별의 객체에 새로운 책임을 추가해야 할 때 제거될 수 있는 책임일 때 실제 상속으로 서브클래스를 계속 만드는 방법이 실질적이지 못할 때 Structure Component: 동적으로 추가할 기능을 가질 가능성들이 있는 객체에 대한 인터페이스 ConcreteComponent: 추가적인 기능이 실제 정의되어야 할 필요가 있는 객체 Decorator: Component 객체에 대한 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 인터페이스를 정의 ConcreteDecorator: Component에 새롭게 추가할 기능을 실제로 구현하는 클래스 Collaborations Decorator는 자신이 Component 객체 쪽으로 요청을 전달한다....