개발 etc

JAVA 자바 데코레이터 패턴(Decorator Pattern)

알통몬_ 2017. 3. 12. 20:51
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


데코레이터 패턴은 프록시 패턴과 구현 방법이 같아요. 

단지 프록시 패턴은 클라이언트가 최종적으로 

돌려받는 반환값을 조작하지 않고 그대로 전달하지만, 

데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧입힙니다.


바로 예제를 통해 데코레이터 패턴을 적용한 코드를 보겠습니다.


예제)

IService.java

package decoratorPattern;


public interface IService {

public abstract String runSomething();

}


Service.java

package decoratorPattern;


public class Service implements IService {

public String runSomething() {

return "서비스 짱!!!";

}

}


Decorator.java

package decoratorPattern;


public class Decorator implements IService {

IService service;


public String runSomething() {

System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달");


service = new Service();

return "정말" + service.runSomething();

}

}


ClientWithDecorator.java

package decoratorPattern;


public class ClientWithDecolator  {

public static void main(String[] args) {

IService decoreator = new Decoreator();

  System.out.println(decoreator.runSomething());

}

}


반환 값에 장식을 더한다는 것만 빼면 이전 포스팅의 프록시 패턴과 같습니다.

- 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.

- 대리자는 실제 서베스에 대한 침조 변수를 갖는다(합성).

- 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 

  그 값을 클라이언트에게 돌려준다.

- 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.


한마디로 정리하면 

-메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴- 

이라고 할 수 있겠습니다.

데코레이터 패턴도 마찬가지로 프록시 패턴처럼

 OCP 개방 폐쇄 원칙과  DIP 의존 역전 원칙이 적용된 설계 패턴입니다.

반응형