[디자인 패턴] - 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
볼빵빵오춘기