3. 객체 꾸미기: 데코레이터 패턴

<aside> 💡 디자인 원칙 OCP(Open-Closed-Principle): 클래스는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다.

</aside>

데코레이터 패턴 살펴보기 (with 스타벅스 예제)

  1. DarkRost 객체를 가져온다
    1. Beverage 상속받음. cost 메소드 가지고있음
  2. Mocha 객체로 장식한다
    1. Mocha 객체 == 데코레이터
    2. 객체의 형식은 객체가 장식하고 있는 객체의 형식을 반영(mirror, 같은 형식을 갖는다)한다.
    3. 따라서 Mocha에도 cost 메소드가 있고 Mocha가 감싸고 있는 것도 Beverage 객체로 간주 가능.
  3. Whip 객체로 장식한다
    1. Whip 객체 == 데코레이터
    2. cost 메소드 가짐
  4. cost() 메소드를 호출한다. 이때 첨가물의 가격을 계산하는 일은 해당 객체에게 위임한다.
    1. 가장 바깥쪽에 있는 데코레이터인 Whip의 cost 메소드 호출
    2. Whip은 Mocha의 cost 메소드 호출
    3. Mocha는 다시 DarkRoast의 cost 메소드 호출
    4. DarkRoast 값 리턴
    5. Mocha는 리턴받은 값에 Mocha 가격을 더하여 리턴
    6. Whip은 리턴받은 값에 Whip 가격을 더해 최종 가격 리턴

데코레이터 패턴 특징

데코레이터 패턴 정의