데코레이터 패턴(Decorator Pattern)
디자인 패턴장식하는 사람이란 입장에서 접근해보자. 데코레이터 패턴의 구현 방법은 프록시 패턴과 동일하다. 다만 프록시 패턴과 다른 점은 프록시 패턴이 반환값을 조작하지 않고 그대로 전달하는 것과 다르게 데코레이션을 한다.
바로 코드를 확인해보자.
[IService]
package decoratorPattern;
public interface IService {
public abstract String runProcess();
}
[Service]
package decoratorPattern;
public class Service implements IService {
@Override
public String runProcess() {
return "process";
}
}
[Decorator]
package decoratorPattern;
public class Decorator implements IService {
IService service;
@Override
public String runProcess() {
System.out.println("호출에 대한 장식이 주목적이며, 클라이언트에게 장식이 달린 반환 결과를 전달");
service = new Service();
return "장식" + service.runProcess();
}
}
기존의 프록시 패턴과 다르게 Decorator의 runProcess가 반환하는 문자열에 "장식" 이 추가되지 않았는가?
이제 데코레이터 패턴의 핵심들을 살펴보자.
-
장식자는 실제 서비스와 같은 이름의 메소드를 사용한다.
-
장식자는 실제 서비스에 대한 참조 변수를 갖는다 (합성).
-
장식자는 실제 서비스와 같은 이름을 가진 메소드를 호출하고, 반환값에 장식을 붙여서
클라이언트에게 전달한다. -
장식자는 실제 서비스의 메소드 호출 전후에 별도의 로직을 수행할 수 있다.
하나만 기억하자!
메소드 호출 반환값에 변화를 주기 위해 중간에 데코레이터를 두는 패턴!
스프링에 녹아있는 디자인 패턴들
guy-who-writes-sourcecode.tistory.com/30
'디자인 패턴' 카테고리의 다른 글
템플릿 메소드 패턴 (Template Method Pattern) (0) | 2020.12.07 |
---|---|
싱글톤 패턴 (Singleton Pattern) (1) | 2020.12.07 |
프록시 패턴(Proxy Pattern) (0) | 2020.12.03 |
어댑터 패턴(Adapter Pattern) (0) | 2020.12.03 |
스프링에 녹아있는 아름다운 디자인 패턴 (0) | 2020.12.03 |