Closed taxol1203 closed 2 years ago
데코레이터 기법은 기능을 추가할 때 사용하는 기법으로, 원본을 인터페이스로 감싼 다음 추가 기능을 붙이는 방식이라 이해하면 될 것 같습니다.
아래 이미지를 보면 ConcreteComponent에 기능을 추가할 때 인터페이스 Component를 만들고, Decorator가 인터페이스를 구현하게 합니다. 이때 Decorator는 기능을 추가할 대상인 Component를 DI받습니다. 그러면 Component를 구현한 ConcreteComponent의 인스턴스가 들어가게 될 겁니다. 추가 기능은 Decorator를 상속받는 클래스로 만듭니다.
추가되는 기능은 추상 클래스인 Decorator에서 메서드로 정의되기 때문에 책에서 말한 것처럼 메서드만 호출이 일어나는 지점으로 제한되는 것입니다. 메서드만 추가기능을 구현할 자식 클래스에서 오버라이드해 재정의할 수 있으니까요.
요약: 데코레이터 패턴은 원본의 인터페이스를 DI받는 추상 클래스에 추가 기능을 메서드 단위로 추가합니다. 메서드 단위로 추가하는 이유는 추상 클래스를 상속받아 추가 기능 메서드를 오버라이드하기 위함입니다.
746p. 인터페이스와 DI를 활용하는 데코레이터 패턴으로 인하여 오직 메소드만 호출이 일어나는 지점으로 제한된다고 합니다. 왜 메서드로만 제한이 되나요?