객체의 결합을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴이다.
즉, 기본 기능 외에 각 추가 기능을 Decorator 클래스로 정의한 후 추가 기능의 조합을 설계하는 방식!
데코레이터 패턴의 주의할 점
디자인을 유연하게 하는건 사실이지만, 일을 하다 보면 자잘한 클래스가 엄청나게 추가되는 경우가 있다.
바로 데코레이터를 끼워 넣어도 클라이언트는 데코레이터를 사용하고 있다는 사실을 모르는 장점이 있지만,
데코레이터를 도입하면 구성 요소를 초기화하는 데 필요한 코드가 훨씬 복잡해진다.
예시 : Java IO 라이브러리