티스토리 뷰

반응형

* Head First - Design Patterns 의 데코레이터 패턴을 기반으로 작성하였습니다. 자세한 설명은 도서를 참고해주세요.

다양한 디자인패턴이 존재합니다.

디자인패턴은 누군가가 나의 문제를 이미 해결해 놓았고, 이미 경험한 개발자들의 경험이 모여 디자인패턴을 만들어 졌습니다.

디자인 패턴은 코드를 재사용하는 것과 마찬가지로 경험을 재사용하는 것입니다.

데코레이션 패턴을 소개하기 앞써 OCP(Open-Close Principle) 에 대해서 언급하겠습니다.

OCP(Open-Closed Principle)는 가장 중요한 디자인 원칙 가운데 하나입니다.

"클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다."

 

데코레이터 패턴

데코레이터 패턴(Decorator Pattern)으로는 객체에 추가적인 요건을 동적으로 첨가 할 수 패턴으로써 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장 할 수 있습니다.

즉, 자기가 감싸고 있는 구성요소의 메소드를 호출한 결과에 새로운 기능을 더함으로써 행동을 확장합니다.

데코레이션패턴의 구조를 간단히 다음과 같이 정의할 수 있습니다.

 

데코레이터 패턴 정의

  • 데코레이터의 수퍼클래스는 자신이 장식하고있는 객체의 수퍼클래스와 같다.
  • 한 객체를 여러 개의 데코레이터롤 감쌀 수 있다. (데코레이터의 개수 제한 없음)
  • 데코레이터는 자신이 감싸고 있는 객체와 같은 수퍼클래스를 가지고 있기 때문에 원래 객체(싸여져 있는 객체)가 들어갈 자리에 데코레이터 객체를 집어 넣어도 상관 없다.
  • 데코레이터는 자신이 장식하고있는 객체에게 어떤 행동을 위임하는 것 외에 원하는 추가적인 작업을 수행할 수 있다.
  • 객체는 언제든지 감쌀 수 있기 때문에 실행중에 필요한 데코레이터를 마음대로 적용할 수 있다.

 

별다방 예시를 통한 데코레이터 이해하기

데코레이터 패턴을 이해하기 위해서는 별카페 주문 계산하는 방식을 사용하면 좋습니다.

 

데코레이터 패턴 장단점

데코레이터 패턴의 장점과 단점을 간단히 한 줄로 표현하면 다음과 같습니다.

데코레이터패턴 장점

구성과 위임을 통해서 실행중에 새로운 행동을 추가할 수 있습니다.

데코레이터패턴 단점

자잘한 객체들이 매우 많이 추가될 수 있고, 데코레이터를 너무 많이 사용하면 코드가 필요 이상으로 복잡해질 수도 있습니다.

 

마무리

데코레이터 패턴에 대해서 공부했습니다.

과연 데코레이터패턴을 어디에 사용할 수 있을까?

기존코드를 둔 상태로 재사용 목적이 아닌 확장 개념으로 사용하는 곳에서는 데코레이터 패턴을 적용할 수 있을거 같습니다.

java.io 패키지에 존재하는 BufferedInputStream과 LineNumberInputStream 모두 FilterInputStaream을 확장한 클래스입니다.

출처 : http://stg-tud.github.io/sedc/Lecture/ws13-14/5.3-Decorator.html

데코레이터 패턴의 특성인 OCP 원칙을 적용하는데 고민하는 것도 프로그래밍을 잘하는 방법 중 한가지로 생각됩니다.

상속 개념을 재사용 목적 뿐만 아니라 확장개념까지 생각한다면 어느순간 OCP 원칙을 준수한 코드를 발견할 것으로 기대합니다.

 

출처

http://stg-tud.github.io/sedc/Lecture/ws13-14/5.3-Decorator.html

[도서] Head First - Design Patterns

반응형

'프로그래밍 > Design Patterns' 카테고리의 다른 글

역할 사슬(Chain of Responsibility) 패턴  (0) 2022.01.21
빌더(Builder) 패턴  (0) 2022.01.20
브리지(Bridge) 패턴  (0) 2022.01.14
템플릿 메소드 패턴  (0) 2021.09.27
싱글톤 패턴 (Singleton Pattern)  (0) 2017.12.27
댓글