Decorator Pattern

데코레이터 패턴은 프록시 패턴과 거의 동일하나, 원본의 결과물에 부가적인 것을 더하여 반환하는 패턴을 말한다. 즉, 객체에 동적으로 새로운 책임을 추가 할 수 있도록 하는 패턴이다.

그 외 설명은 프록시패턴과 동일하기에 생략한다.

프록시 패턴과 데코레이터 패턴간의 비교

공통점

  • 둘 다 동일한 인터페이스를 구현한다. 즉, 실제 Real Class를 감싸는 인터페이스를 만들어 해당 클래스의 인스턴스 객체가 Real Class에게 요청을 위임하도록 한다.

차이점

  • 프록시 패턴은 Wrapper Class와 Real Class간의 관계가 컴파일 타임에 정해지지만, 데코레이터 패턴은 런타임시점에 정해진다.
  • 프록시 패턴은 주로 접근에 대한 제어를 목적으로 하며, 데코레이터 패턴은 기존 클래스의 기능 확장을 목적으로 한다.
    • 프록시 패턴은 타깃의 기능 자체에는 관여하지 않고, 클라이언트가 타깃을 접근하는 방식을 변경해준다. 하지만 데코레이터 패턴을 타깃에 부가적인 기능을 런타임시 다이나믹하게 부여해주기 위해 사용한다.

정리

  • 장식자는 실제 서비스와 같은 이름의 메서드를 구현하며 이 때 인터페이스를 사용한다.
  • 장식자는 실제 서비스에 대한 참조 변수를 가진다.
  • 장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고, 그 반환 값에 장식을 더해 클라이언트에게 돌려준다.
  • 장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수 있다.

데코레이터 패턴을 정리해보자면, 메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴이라고 할 수 있다.


oksusutea's blog

꾸준히 기록하려고 만든 블로그