Decorator Pattern

YeJI Kang·2021년 5월 30일
0

Head First Design Pattern

목록 보기
3/14

OCP(Open-Closed Principal)

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

기존 코드는 건드리지 않은 채로 확장을 통해서 새로운 행동을 간단하게 추가할 수 있게 구조를 잡으면 새로운 기능을 아주 유연하게 추가할 수 있으면서도 강하고 견고한 디자인을 만들 수 있습니다. 다만, 무조건 OCP를 적용하는 것은 시간 낭비가 될 수도 있고, 쓸 데 없는 일일 수 있으니 유의하여야 합니다.

데코레이터 패턴(Decorator Pattern)의 정의

데코레이터 패턴은 객체를 다른 객체로 "장식"하는 것입니다. 데코레이터 패턴은 아래와 같이 정의됩니다.

데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다.

새로운 동작은 ConcreteComponent 에 동적으로 추가하게 됩니다.

Decorator 안에는 Component 객체가 들어있고, 자신이 장식할 구성요소와 같은 인터페이스 또는 추상 클래스를 구현합니다.

데코레이터 패턴(Decorator Pattern) 동작 방식

Head First Java에서 예제로 사용하고 있는 코드는 아래와 같습니다.

code reference

데코레이터의 특징은 아래와 같습니다.

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

데코레이터 패턴은 빌더 패턴과 팩토리 패턴과 함께 사용하면 더 "잘 캡슐화 되어 있다"를 깨달을 수 있습니다.

하지만, 데코레이터 패턴을 사용하면 자잘한 객체들이 매우 많이 추가될 수 있고, 데코레이터를 너무 ㅁ낳이 사용하면 코드가 필요 이상으로 복잡해질 수 있으니 유의하여 사용하여야 합니다.

자바 I/O에서 적용된 데코레이터 패턴(Decorator Pattern)

java.io 하위 클래스들도 데코레이터 패턴을 이용하여 만들어져 있습니다.

profile
재밌는 것만 하고 싶어 ʕ•ﻌ•ʔ

0개의 댓글