Search
moon
sun
🎏

Decorator pattern(데코레이터 패턴)

💡
데코레이터 패턴이란? 위키백과 객체 지향 프로그래밍에서 데코레이터 패턴은 동일한 클래스의 다른 인스턴스의 동작에 영향을 주지 않고 동적으로 개별 객체에 동작을 추가할 수 있도록 하는 디자인 패턴 특징
•
유연한 설계 (기능확장을 위한 서브클래싱에 대한 유연한 대안)
•
책임은 런타임에 동적으로 추가, 제거된다.
😅
솔직히 이렇게 본다면 잘 이해가 안된다. 그래서 필자의 경우는 필자가 이해한 방식으로 관찰자 패턴을 정의해본다.
😅
예를 들어 아래와 같은 커피의 메뉴 판에 있는 레시피를 만들어야 한다고 가정해보자.

데코레이터 패턴을 적용하기 전

💡
데코레이터 패턴을 적용하기 전 기준으로 만약 레시피를 만들어야 한다면 각각에 메뉴에 맞는 구현체를 따로 만들 것이다. 근데 1년 후에 장사가 너무 잘되어서 1000개의 메뉴가 생겼다 그러면 1000개의 구현을 모두 만들건가?

데코레이터 패턴을 적용하기

💡
근데 똑똑한 사장님은 재료들의 조합이 곧 레시피고 메뉴가 된다는 것을 발견했다. 그래서 기존에는 각 메뉴를 기준으로 재료를 만들었지만 이제는 재료를 기준으로 재료들의 구현만 만들고 이를 최종적으로 취합하여 사용하게 된다.

데코레이터 패턴 이해하기

😅
데코레이터 패턴이란? 위키백과 객체 지향 프로그래밍에서 데코레이터 패턴은 동일한 클래스의 다른 인스턴스의 동작에 영향을 주지 않고 동적으로 개별 객체에 동작을 추가할 수 있도록 하는 디자인 패턴
❗아 재료로 모두 보고 재료끼리 추가 되는거구나 특징
•
유연한 설계 (기능확장을 위한 서브클래싱에 대한 유연한 대안)
❗재료 타입만 맞춰주면 어떤 연산이든 실행 할 수 있겠네
•
책임은 런타임에 동적으로 추가, 제거된다.
❗적용하기 전처럼 만들어 놓고 사용하는 것이 아니기 때문에 런타임에 추가되는거구나
Component - 재료 상위 ConcreteComponent - 여기서는 모든 재료들의 시작점이 [원두 추출]이 될 것이다. Decorator - 재료들의 추상형 ConcreteDecorator - 우유, 물, 휘핑, 모카… 등등
💡
데코레이터 패턴은 일종의 래핑이다. 중요한 것은 래핑하는 방식은 따로 클래스를 만들어 재료들을 래핑하는 것이 아닌 래핑할 수 있는 재료자료형을 만들고 이를 이용하여 서브 클래스를 만들어 추가 시킨다. 결국 마지막에 사용자에게 도달하는 자료형도 재료 자료형이 될 것이다.