본문 바로가기

💻 개발IT/Design Patterns

3. Behavior 패턴 - Template Method Pattern

문제 정의

아래와 같이 커피와 차를 만드는 class가 있다. 만들다보니 커피와 차의 class가 유사하다.

새로운 음료를 만들게 되면 비슷한 결과가 나타나게 되고 코드의 중복이 나타난다.

 

해결 방법 

따라서 공통적인 implementation을 abstract class로 만든다.

prepareRecipe는 final로 만들어 하위 클래스에서 변경하지 못하도록 한다. (Template Method)

prepareRecipe()는 알고리즘의 템플릿 역할을 하여 template method patten을 구현하고 있다.

다시 CaffeinBeverage를 상속하여 커피와 차 class를 재설계해본다.

새로운 음료가 추가되어도 쉽게 만들 수 있다.

 

Template Method Pattern

알고리즘의 step(skeleton)을 정의하고, 상속을 사용하여 subclass가 해당 step들을 implement할 수 있도록 하는 패턴

해당 step 중 공통적인 부분은 상위 class에서 수정 못 하게 막고, 변경되는 부분은 하위 class에서 재정의할 수 있도록 한다.

(하지만 하위 class가 step은 변경하지 못한다)

 

 

Hook Method

abstract class 내에서 선언되는 method이고 body는 비어있거나 default implementation을 제공한다.

Hook Method는 하위 class에서 step을 조정할 수 있는 방법이다.

 

Hollywood Principle

hollywood 에 가고 싶은 actor가 매니저에게 전화하지만 매니저는 "전화하지 말고, 내가 전화할 때까지 기다려!" 하는...

 

시스템 컴포넌트마다 level이 존재하는데 dependency가 잘못되는 것을 방지하자는 principle

(high-level component는 low-level component에 dependency 가지면 안 된다. 반대도 마찬가지)

 

high-level component가 허용하는 부분만 low-level component가 control할 수 있다.

 

 

 

반응형