티스토리 뷰

데코레이터 패턴 (Decorator Pattern)

💡 기존 코드 변경 없이 부가 기능을 동적으로 추가할 수 있는 패턴이다. 확장을 위해 서브 클래스를 생성하는 것이 아닌 위임을 사용해 부가기능을 추가하는 것이 가능하다.

👍 장점

  • 다른 객체에 영향을 주지 않고 객체에 새로운 책임을 동적으로 추가할 수 있다. 즉, OCP 원칙을 준수한다.
  • 필요에 따라 추가•삭제가 용이하다.

 

객체 모델

Decorator Pattern

Component

데코레이터 혹은 데코레이터를 통해 책임을 추가할 가능성이 있는 객체의 인터페이스

 

Decorator

Component 객체를 합성하면서 Component 인터페이스를 구현해 중간에 책임을 추가할 수 있도록 만든 객체 

 

ConcreteComponent

데코레이터를 통해 책임을 추가할 수 있는 Component 구현 객체

 

🤔 상세코드는 아래 예제코드를 통해 확인하세요

 

프록시 패턴 ( Proxy Pattern )

💡 특정 객체에 대한 접근 제어 혹은 기존 코드 변경없이 기능을 추가할 수 있는 디자인 패턴이다.
     그 구조 자체는 데코레이터 패턴과 유사하지만 그 목적이 다르다.

 

👍 장점

  • 다른 객체에 영향을 주지 않고 객체에 새로운 책임을 동적으로 추가할 수 있다. 즉, OCP 원칙을 준수한다.
  • 접근 제어, 초기화 지연등 다양한 기능을 제공할 수 있다.

 

객체 모델

 

Proxy

 

Subject

Proxy와 RealSubject 을 묶는 공통 인터페이스이다. 

 

Proxy

Subject 을 구현하여 RealSubject 으로의 요청을 제어하거나 부가 기능을 추가한다. 기능은 아래와 같다.

  • 원격지 프록시 - 요청 메시지와 인자를 인코딩 해 다른 주소 공간에 실제 대상에게 전달
  • 가상의 프록시 - 실제 대상에 추가 정보를 보유하여 실제 접근을 지연함.
  • 보호용 프록시 - 요청 대상의 권한 확인및 요청 제어

🤔 상세코드는 아래 예제코드를 통해 확인하세요

 

🙅 데코레이터와 프록시의 차이

패턴 이름 차이점
프록시 패턴 • 제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다.
• 클라이언트가 받는 반환 값은 특별한 경우가 아니라면 변경하지 않는다.
데코레이터 패턴 • 클라이언트가 받는 반환값에 영향을 주는 패턴이다.

🔥 클라이언트가 요청하는 반환 값에 영향을 주는 지 여부가 가장 큰 차이점이다.

 

 

예제코드

 

GitHub - icraft2170/Blog-Example-Code

Contribute to icraft2170/Blog-Example-Code development by creating an account on GitHub.

github.com

 

 

참조

- GoF의 디자인 패턴

 

GoF의 디자인 패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소 - 교보문고

▶ 이 책은 디자인 패턴을 다룬 이론서입니다. 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있습니다.

www.kyobobook.co.kr

- 코딩으로 학습하는 GoF의 디자인 패턴

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

댓글