본문 바로가기

일기

Proxy pattern vs Decorator pattern

spring을 공부하면서 aspect를 보게 되었는데,  aspect를 위한 proxy object를 설명하면서 "해당 예시는 decorator 객체에 가깝다." 라고 설명한 부분이 있었다.

여기에 두 객체 무슨 차이가 있을까 궁금하여 찾아보았다. 

Proxy pattern : 원본 객체에 대한 접근 권한을 설정하는 것.

출처 : 위키피디아

 

Derocator pattern : 원본 객체에 추가 기능을 더하는 것.

출처 : https://donxu.tistory.com/

 

두 패턴 모두 원본 객체(RealSubject, ConcreteComponent) 와 Decorator, Proxy class가 같은 interface를 상속 받는 것은 같지만, 사용예시들을 보면 다른 역할을 하고 있었다.

Decorator패턴은 원본 객체에 기능을 "추가"하는 것이다. 그래서 Decorator 패턴이 적용된 객체는, 원본 객체의 원래 기능 뿐 아니라 추가하여 Decorator를 위해 사용된 concreateDecorator객체의 기능들까지 덕지덕지 붙어있다. 결과 값이 Decorator class에 의해 바뀔 수 도 있다.

Proxy 패턴은 원본 객체를 "대리"하는 것이다. 대리를 함에 있어서 조금의 추가 기능이 붙을 수는 있어도, 원본 객체의 역할을 바꾸지 않는다. 실제로, proxy 객체의 수행은 원본 객체에게 "위임"하여 실행한다.

aspect의 주 기능이 원본 객체(핵심 기능)에 접근할 때 proxy object를 통해 접근하도록 하는것이고, 핵심기능의 앞 뒤로 log를 남기거나 시간을 재는 것은 부가적인 기능이므로, proxy 패턴이 적용되었다고 보는 게 맞을 것이다.

 

책에서 보여준 예시에서는 간단한 예시를 드느라 proxy object의 역할이 많이 줄어들게 된 것 같다.

 

출처
『Head First Design Patterns』. 에릭 프리먼, 엘리자베스 프리먼, 케이시 시에라, 버트 베이츠
『초보 웹개발자를 위한 spring 프로그래밍 입문』, 최범균

'일기' 카테고리의 다른 글

DAO, DTO 정리  (0) 2022.01.17
TypeError: Object of type is not JSON serializable  (0) 2021.09.29