JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[토비의 스프링] 8.4.2_AOP에서 부가기능을 부여할 곳은 왜 메서드로 제한되어 있나요? #142

Closed taxol1203 closed 2 years ago

taxol1203 commented 2 years ago

746p. 인터페이스와 DI를 활용하는 데코레이터 패턴으로 인하여 오직 메소드만 호출이 일어나는 지점으로 제한된다고 합니다. 왜 메서드로만 제한이 되나요?

kjsu0209 commented 2 years ago

데코레이터 기법은 기능을 추가할 때 사용하는 기법으로, 원본을 인터페이스로 감싼 다음 추가 기능을 붙이는 방식이라 이해하면 될 것 같습니다.

아래 이미지를 보면 ConcreteComponent에 기능을 추가할 때 인터페이스 Component를 만들고, Decorator가 인터페이스를 구현하게 합니다. 이때 Decorator는 기능을 추가할 대상인 Component를 DI받습니다. 그러면 Component를 구현한 ConcreteComponent의 인스턴스가 들어가게 될 겁니다. 추가 기능은 Decorator를 상속받는 클래스로 만듭니다.

추가되는 기능은 추상 클래스인 Decorator에서 메서드로 정의되기 때문에 책에서 말한 것처럼 메서드만 호출이 일어나는 지점으로 제한되는 것입니다. 메서드만 추가기능을 구현할 자식 클래스에서 오버라이드해 재정의할 수 있으니까요.

요약: 데코레이터 패턴은 원본의 인터페이스를 DI받는 추상 클래스에 추가 기능을 메서드 단위로 추가합니다. 메서드 단위로 추가하는 이유는 추상 클래스를 상속받아 추가 기능 메서드를 오버라이드하기 위함입니다.

image