desing pattern study 8 template method pattern
TRANSCRIPT
• 본 PPT는 Design Patterns Study를위해작성되었습니다.
• Study에사용한교재는한빛미디어에서나온
• [Head First Desgin Patterns]을사용하였습니다.
• Written by 서울시립대이희태 For study withNHN NEXT2기 조현호서울시립대 이희태
Template.
[NOUN] A template is a thin piece of metal or plastic which is cut into a particular shape. It is used to help you cut wood, paper, metal, or other materials accurately, or to reproduce the same shape many times.
출처 – 네이버영영사전
커피 vs 홍차
커피만드는법 홍차만드는법
1. 물을끓인다.
2. 끓는물에커피를우려낸다.
3. 커피를컵에따른다.
4. 설탕과우유를추가한다.
1. 물을끓인다.
2. 끓는물에차를우려낸다.
3. 차를컵에따른다.
4. 레몬을추가한다.
prepareRecipe()boilWater()pourInCup()
CaffeinBeverage
prepareRecipe()brewCoffeeGrinds()addSugarAndMilk()
Coffee
prepareRecipe()steepTeaBag()addLemon()
Tea
커피 vs 홍차
커피만드는법 홍차만드는법
1. 물을끓인다.
2. 끓는물에커피를우려낸다.
3. 컵에따른다.
4. 설탕,우유를첨가물을추가한다.
1. 물을끓인다.
2. 끓는물에차를우려낸다.
3. 컵에따른다.
4. 레몬을첨가물을추가한다.
템플릿 메소드 패턴 정의
• Def. 템플릿메소드패턴에서는알고리즘의골격을정의합니다. 알고리즘의여러단계중일부는서브클래스에서구현할수있습니다. 템플릿메소드를이용하면알고리즘의구조는그대로유지하면서서브클래스에서특정단계를재정의할수있습니다.
UML 다이어그램TemplateMethod() 안에서primitiveOperation1,2…등을활용한다.
TemplateMethod 알고리즘자체는primitiveOperation들의구체적인구현과는분리되어있다.
primitiveOperation1,2는ConcreteClass에서구현한다.
abstract method
헐리우드 원칙(HollyWood Principle)
먼저연락하지마세요.저희가연락드리겠습니다.
디자인원칙 7.
헐리우드 원칙을사용하면
“의존성부패(dependency rot)”를방지할 수있다.
저수준 구성요소에서시스템에접속할수 있지만, 언제어떻게그구성요소들을사용할지는고수준구성요소에서결정하게된다.즉, 고수준구성요소에서저수준구성요소에게 “먼저연락하지마세요. 제가먼저연락드리겠습니다.”라고얘기하는것과같다.
의존성 부패
Ant
AntHouse
House
HumanOldHouse
Bugs
어떤고수준구성요소가저수준구성요소에 의존하고, 그저수준 구성요소가다시고수준구성요소에의존하고, 또그고수준이다른저수준에……. 이런식으로클래스사이의 의존관계가복잡하게꼬여있는것
헐리우드원칙과 템플릿 메소드 패턴
prepareRecipe()boilWater()brew()pourInCup()addCondiments()
CaffeinBeverage
brew()addCondiments()
Coffee
brew()addCondiments()
Tea
CaffeinBeverage에서음료를만드는알고리즘(template method)을장악하고있다.
brew(),addCondiments() 같은메소드의구현이필요할때에만서브클래스를불러낸다.
Coffee와 Tea에서먼저추상클래스를직접호출하지않는다!
Q1. 헐리우드원칙 vs 의존성뒤집기 원칙
추상화된것에의존하도록만들어라.구상클래스에의존하도록만들지않도록한다.
의존성뒤집기 원칙
공통점 :1. 객체를분리시킨다.2. 클래스가상호관계가되지않도록만든다.
차이점 :
1. 의존성을피하는방법에있어서의존성뒤집기원칙이훨씬더강력하고일반적인내용을담고있다.
2. 헐리우드원칙은저수준구성요소들을다양하게사용할수있으면서도, 다른클래스가그러한구성요소에너무의존하지않게만들어주는디자인을구현하도록도와준다.
mergeSort안의 compareTo()
Index가몇개안될때→ insertionSort
그렇지않을경우mergeSort알고리즘사용
템플릿메소드패턴의primitiveOperation()…Duck에서구현