객체지향 (OOP)/디자인 패턴

데코레이터 패턴 (Decorator Pattern)

고인돌개발자 2021. 6. 28. 21:27

정의[위키피디아]

데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.

 

정의[쉬운버전]

데코레이터는 원본에 장식을 더하는 패턴이다.

프록시 패턴 구현 방법이 같지만 다음과 같은 차이점이 있다.

 

프록시 패턴 vs 데코레이터 패턴
프록시 패턴 - 클라이언트에 최종적으로 리턴되는 반환값을 그대로 전달한다.

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

 

프록시 패턴과 동일하게 OCP, DIP 원칙을 구현한다.  


<Class Uml>

소스코드로 이해하기 

public interface IService {
	public String runSomething();
}

-----------

public class Service implements IService{
	
	public String runSomething() {
		return "서비스 짱 !!!";
	}
	
}

--------------

public class Decorator implements IService {

	IService service;
	
	@Override
	public String runSomething() {
		System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달");
		
		service = new Service();
		return "정말" + service.runSomething();
	}

}

-----------

public class ClientWithNoDecolator {
	
	public static void main(String[] args) {
		Service service = new Service();
	 	System.out.println(service.runSomething());
	}

}

------------

public class ClientWithDecolator {
	
	public static void main(String[] args) {
		IService decorator = new Decorator();
		System.out.println(decorator.runSomething());
	}
}

* 마치며, 

  앞장의 프록시 패턴과 비교하면 거의 유사하다는것과, 조금 다르다는걸 알 수 있다.

 

 

참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해