- Decorator Pattern ?
- 한 객체를 여러개의 데코레이터로 감싸는 패턴을 데코레이터 패턴이라고 한다.
- why Decorator Patterm
- oop의 특징 중 확장에는 열려있고 수정에는 닫혀있어야 한다는 원칙을 지키기 위한 패턴으로 등장.
- 확장성을 증대시킬수록 다수의 서브 클래스가 존재하게 되었으며 , 클래스를 줄이게 되면 클래스의 수정이 빈번하게 일어나게 된다.
- 데코레이션 패턴 형식 의 예
- 다크로스트에 휘핑과 모카를 추가하여 금액을 청구하는 로직을 구현하는 예를 든다.
- 가장 바깥쪽에 있는 데코레이터 whip의 cost() 호출한다.
- whip에서는 가장자리 mocha의 cost()를 호출한다.
- Mocha에서 다시 DarkRoast의 cost()를 호출한다.
- DarkRoast에서는 가격을 반환한다.
- Mocha에서는 DarkRoast의 리턴값과 모카값을 더해 반환한다.
- whip에서는 mocha에서 받은 가격에 whip가격을 더해 최종가격을 반환.
- 구현 클래스다이어그램
- 데코레이터 패턴의 단점
- 잡다한 클래스가 늘어나게 되어 가독성이 나쁘게 된다.
- 상속을 통해 확장성이 가능하지만 디자인 유연성 면에서 좋지 않다.
- 데코레이션을 하나의 클래스에 데코레이션을 감싸는 형태이기 때문에 어떤 클래스로 감싸는 지를 명시해 주어야 한다는 것이다. 다른 형태로 감싸거나 조율함에 있어 유연성이 적다.
참고 블로그 :