초대형 커피 전문점, 스타버즈

OCP 살펴보기

OCP란 : open-closed principle → 클래스는 확장에는 열려 있지만 변경에는 닫혀있어야한다.

우리의 목표는 기존 코드를 건드리지 않고 확장으로 새로운 행동을 추가하는 것 → 새로운 기능을 추가할 때 급변하는 주변 환경에 잘 적응하고 유연하고 튼튼한 디자인을 만들 수 있음

모든 부분에서 OCP를 준수하는 것은 불가능함, OCP를 준수하는 객체지향 디자인을 만들려면 적지 않은 시간과 노력이 필요함. 디자인의 모든 부분을 깔끔하게 정돈할 만큼 여유가 있는 상황도 흔치 않고, 그렇게 할 필요도 없음. OCP를 지키기 위해서 새로운 단계의 추상화가 필요한 경우가 종종 있는데 추상화를 하다 보면 코드가 복잡해짐. 그래서 우리가 디자인한 것 중에서 가장 바뀔 가능성이 높은 부분을 중점적으로 살펴보고 OCP를 적용하는 방법이 가장 좋음

데코레이터 패턴 살펴보기

주문 시스템에 데코레이터 패턴 적용하기

  1. 우선 가장 바깥쪽에 있는 데코레이터인 whip의 cost 메소드를 호출
  2. whip은 mocha의 cost 메소드를 호출
  3. mocha는 다시 darkroast와 cost를 호출
  4. darkroast는 99센트(가격)을 리턴
  5. mocha는 darkroast로부터 리턴받은 가격에 모카 값 20센트를 더해 1.19달러 리턴