OrderService라는 기능을 가진 오브젝트의 클래스를 수정하지 않은채로 부가 기능을 더하는 것
트랜잭션이 적용되지 않았으므로 테스트코드 에러 발생
원래 클래스가 구현하고자 했던 작업을 인터페이스로 추출 → Component
대상이 되는 클래스는 인터페이스를 구현하는 방식으로 만듦 → ConcreteComponent
인터페이스를 만들었으니 인터페이스를 구현한 또 다른 클래스를 만들 수 있음 → Decorator
Decorator를 상속해서 구현한 클래스들을 여러가지 만들 수 있음 → ConcreteDecorator
(Decorator와 ConcreteDecorator를 묶어서 만들수도 있음)
인터페이스가 가지고 있는 오퍼레이션 외에 컴포넌트라고불리느느 인터페이스를 구현한 또 다른 어떤 오브젝트를 가리킬 수 있도록 만들어 놓는 것