////
Search
🎏

Decorator pattern(데코레이터 패턴)

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

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

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

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

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

데코레이터 패턴 이해하기

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