desing pattern study 8 template method pattern

30
DESIGN PATTERN STUDY8. Template Method Pattern 알고리즘 캡슐화

Upload: dragor0123

Post on 19-Jul-2015

92 views

Category:

Software


4 download

TRANSCRIPT

DESIGN PATTERN STUDY8.

Template Method Pattern

알고리즘캡슐화

• 본 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. 레몬을첨가물을추가한다.

카페인 음료 만드는 법

1. 물을끓인다.

2. 우려낸다.

3. 컵에따른다.

4. 첨가물을추가한다.

CaffeinBeverage를 확장한DerivedClass에서 이 메소드들을 정의한다.

Template Method

템플릿 메소드 패턴 정의

• Def. 템플릿메소드패턴에서는알고리즘의골격을정의합니다. 알고리즘의여러단계중일부는서브클래스에서구현할수있습니다. 템플릿메소드를이용하면알고리즘의구조는그대로유지하면서서브클래스에서특정단계를재정의할수있습니다.

UML 다이어그램TemplateMethod() 안에서primitiveOperation1,2…등을활용한다.

TemplateMethod 알고리즘자체는primitiveOperation들의구체적인구현과는분리되어있다.

primitiveOperation1,2는ConcreteClass에서구현한다.

abstract method

코드 탐구

Hook: 기본적으로아무것도하지않는메소드

이 메소드들은subclass에서정의해준다.

Hook란?Super Class에서선언되긴하지만기본적으로아무것도구현되어있지않거나내용이거의없는메소드. SubClass에서구현해도 되고안해도된다.

Hook

CoffeeWithHook 클래스

헐리우드 원칙(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. 헐리우드원칙은저수준구성요소들을다양하게사용할수있으면서도, 다른클래스가그러한구성요소에너무의존하지않게만들어주는디자인을구현하도록도와준다.

오리 5형제입니다!

이친구들을무게순으로정렬해볼까요??

숙녀에게 무게를 묻는 건실례라구요!

Comparable 인터페이스를상속하려면compareTo()메소드를구현해야한다!

템플릿메소드

Arrays.sort() 내부 구조

sort() legacyMergeSort() mergeSort()

mergeSort안의 compareTo()

Index가몇개안될때→ insertionSort

그렇지않을경우mergeSort알고리즘사용

템플릿메소드패턴의primitiveOperation()…Duck에서구현