Hello

[디자인 패턴] - Decorator

by 볼빵빵오춘기

Decorator 패턴

기존 객체의 구조를 변경하지 않고, 동적으로 기능을 확장할 수 있게 해주는 디자인 패턴이다.
즉, 말 그대로 "포장지(Decorator)"처럼 객체를 감싸서 기능을 덧붙이는 구조이다.

 

예시 코드

Component coffee = new BasicCoffee(); // 기본 커피
coffee = new MilkDecorator(coffee); // 우유 추가
coffee = new SyrupDecorator(coffee); // 시럽 추가
coffee.serve(); // 우유와 시럽이 추가된 커피 서빙

 

Decorator 패턴의 장점

기능 확장에 유연

상속 없이도 객체에 새로운 기능을 동적으로 추가 가능하다.

 

기존 코드 수정 없이 기능 변경 가능

OCP(개방-폐쇄 원칙)를 잘 지킨다.

 

조합을 통해 다양한 기능 조합 가능

데코레이터를 겹겹이 감싸며 조합 가능하다.

 

런타임에 기능 부여 가능

실행 중에도 기능 추가/변경 가능하다.

 

Decorator 패턴의 단점

이해와 디버깅 어려움

데코레이터가 여러 개 겹치면 호출 흐름이 복잡해진다.

 

객체 수 증가

데코레이터 클래스가 많아지면 구조가 무거워질 수 있다.

 

설계 복잡도 증가

단순한 기능엔 오히려 과한 설계일 수 있다.

 

Decorator 패턴은 언제 사용하나?

객체의 기능을 확장해야 하는데, 상속으로 해결하기 어려울 때

클래스 수직 확장보다 수평적인 조합을 원할 때

 

기능 확장이 필요하지만 기존 코드를 수정할 수 없을 때

ex) 외부 라이브러리, 안정화된 클래스 등

 

여러 기능을 조합해서 사용할 수 있도록 만들고 싶을 때

ex) 커피 주문 시스템 (기본 + 우유 + 시럽 + 샷 등)

 

정리하자면

Decorator 패턴은 기능을 덧붙이거나 변경하고 싶을 때, 상속 대신 객체를 "감싸는" 방식으로 유연하게 확장할 수 있는 패턴이다.

블로그의 프로필 사진

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기