2018. 6. 1. 19:32ㆍ용어정리/#디자인패턴
[ Decorator Pattern ]
데코레이터 패턴
2018 - 06 - 01
데코레이터 패턴은 도장/도배업자를 의미한다.
데코레이터 패턴이 원본에 장식을 더하는 패턴이라는 것이 이름에 잘 드러나 있다.
데코레이터 패턴은 프록시와 구현 방법이 같다.
다만 프록시 패턴은
클라이언트가 최종적으로 돌려 받는 반환값을 조작하지 않고 그대로 전달하는 반면
데코레이터 패턴은
클라이언트가 받는 반환값에 장식을 덧입힌다.
프록시 패턴 |
제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다. 클라이언트가 받는 반환값을 특별한 경우가 아니면 변경하지 않는다 |
데코레이터 패턴 |
클라이언트가 받는 반환값에 장식을 더한다. |
코드를 살펴보자
IService.java
1 2 3 4 5 | package decoratorPattern; public class IService { public abstract String runSomething(); } | cs |
IService 인터페이스를 구현한 Service.java
1 2 3 4 5 6 7 | package decoratorPattern; public class Service implements IService { public String runSomething(){ return "서비스 짱!!!"; } } | cs |
IService 인터페이스를 구현한 Decorator.java
1 2 3 4 5 6 7 8 9 10 11 12 | package decoratorPattern; public class Decorator implements IService { IService service; public String runSomething(){ System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달"); service = new Service(); return "정말" + service.runSomething(); } } | cs |
데코레이터를 사용하는 ClientWithDecorator.java
1 2 3 4 5 6 7 8 9 | package decoratorPattern; public class ClientWithDecorator { public static void main(String[] args){ Decorator decorator = new Decorator();{ System.out.println(decorator.runSomething()); } } } | cs |
데코레이터 패턴의 중요 포인트를 짚어 보자.
반환값에 장식을 더한다는 것을 빼면 프록시 패턴과 동일하다.
- 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이 때 인터페이스를 사용한다.
장식자는 실제 서비스에 대한 참조 변수를 갖는다(합성)
장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고,
그 반환값에 장식을 더해 클라이언트에게 돌려준다.장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
장식자라는 이름에서 느껴지듯 실제 서비스의 반환 값을 포장(장식)하는 패턴이
데코레이터 패턴임을 기억하자.
마지막으로 데코레이터 패턴을 한 문장으로 정리하면 다음과 같다.
"메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴"
출처
스프링 입문을 위 한 자바 객체 지향의 원리와 이해
김종민 저
'용어정리 > #디자인패턴' 카테고리의 다른 글
용어정리-[#디자인패턴] 5.Template Method Pattern (0) | 2018.06.01 |
---|---|
용어정리-[#디자인패턴] 4.Singleton Pattern (0) | 2018.06.01 |
용어정리-[#디자인패턴] 2.Proxy Pattern (0) | 2018.06.01 |
용어정리-[#디자인 패턴] 1.Adapter Pattern (0) | 2018.06.01 |