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

Desing pattern study 8 template method pattern

Jul 19, 2015

Download

Software

dragor0123
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Desing pattern study 8 template method pattern

DESIGN PATTERN STUDY8.

Template Method Pattern

알고리즘캡슐화

Page 2: Desing pattern study 8 template method pattern

• 본 PPT는 Design Patterns Study를위해작성되었습니다.

• Study에사용한교재는한빛미디어에서나온

• [Head First Desgin Patterns]을사용하였습니다.

• Written by 서울시립대이희태 For study withNHN NEXT2기 조현호서울시립대 이희태

Page 3: Desing pattern study 8 template method pattern

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.

출처 – 네이버영영사전

Page 4: Desing pattern study 8 template method pattern

커피 vs 홍차

커피만드는법 홍차만드는법

1. 물을끓인다.

2. 끓는물에커피를우려낸다.

3. 커피를컵에따른다.

4. 설탕과우유를추가한다.

1. 물을끓인다.

2. 끓는물에차를우려낸다.

3. 차를컵에따른다.

4. 레몬을추가한다.

Page 5: Desing pattern study 8 template method pattern
Page 6: Desing pattern study 8 template method pattern

prepareRecipe()boilWater()pourInCup()

CaffeinBeverage

prepareRecipe()brewCoffeeGrinds()addSugarAndMilk()

Coffee

prepareRecipe()steepTeaBag()addLemon()

Tea

Page 7: Desing pattern study 8 template method pattern

둘다똑같이물에다가“우려낸다.”

둘다똑같이무언가를“첨가한다.”

Page 8: Desing pattern study 8 template method pattern

커피 vs 홍차

커피만드는법 홍차만드는법

1. 물을끓인다.

2. 끓는물에커피를우려낸다.

3. 컵에따른다.

4. 설탕,우유를첨가물을추가한다.

1. 물을끓인다.

2. 끓는물에차를우려낸다.

3. 컵에따른다.

4. 레몬을첨가물을추가한다.

Page 9: Desing pattern study 8 template method pattern

카페인 음료 만드는 법

1. 물을끓인다.

2. 우려낸다.

3. 컵에따른다.

4. 첨가물을추가한다.

Page 10: Desing pattern study 8 template method pattern

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

Template Method

Page 11: Desing pattern study 8 template method pattern
Page 12: Desing pattern study 8 template method pattern

템플릿 메소드 패턴 정의

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

Page 13: Desing pattern study 8 template method pattern

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

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

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

abstract method

Page 14: Desing pattern study 8 template method pattern

코드 탐구

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

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

Page 15: Desing pattern study 8 template method pattern

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

Hook

Page 16: Desing pattern study 8 template method pattern

CoffeeWithHook 클래스

Page 17: Desing pattern study 8 template method pattern
Page 18: Desing pattern study 8 template method pattern

헐리우드 원칙(HollyWood Principle)

먼저연락하지마세요.저희가연락드리겠습니다.

디자인원칙 7.

헐리우드 원칙을사용하면

“의존성부패(dependency rot)”를방지할 수있다.

저수준 구성요소에서시스템에접속할수 있지만, 언제어떻게그구성요소들을사용할지는고수준구성요소에서결정하게된다.즉, 고수준구성요소에서저수준구성요소에게 “먼저연락하지마세요. 제가먼저연락드리겠습니다.”라고얘기하는것과같다.

Page 19: Desing pattern study 8 template method pattern

의존성 부패

Ant

AntHouse

House

HumanOldHouse

Bugs

어떤고수준구성요소가저수준구성요소에 의존하고, 그저수준 구성요소가다시고수준구성요소에의존하고, 또그고수준이다른저수준에……. 이런식으로클래스사이의 의존관계가복잡하게꼬여있는것

Page 20: Desing pattern study 8 template method pattern

플러그에콘세트를맞춰야할까?콘센트에플러그를맞춰야할까?

Page 21: Desing pattern study 8 template method pattern

헐리우드원칙과 템플릿 메소드 패턴

prepareRecipe()boilWater()brew()pourInCup()addCondiments()

CaffeinBeverage

brew()addCondiments()

Coffee

brew()addCondiments()

Tea

CaffeinBeverage에서음료를만드는알고리즘(template method)을장악하고있다.

brew(),addCondiments() 같은메소드의구현이필요할때에만서브클래스를불러낸다.

Coffee와 Tea에서먼저추상클래스를직접호출하지않는다!

Page 22: Desing pattern study 8 template method pattern

Q1. 헐리우드원칙 vs 의존성뒤집기 원칙

추상화된것에의존하도록만들어라.구상클래스에의존하도록만들지않도록한다.

의존성뒤집기 원칙

공통점 :1. 객체를분리시킨다.2. 클래스가상호관계가되지않도록만든다.

차이점 :

1. 의존성을피하는방법에있어서의존성뒤집기원칙이훨씬더강력하고일반적인내용을담고있다.

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

Page 23: Desing pattern study 8 template method pattern

오리 5형제입니다!

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

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

Page 24: Desing pattern study 8 template method pattern
Page 25: Desing pattern study 8 template method pattern

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

Page 26: Desing pattern study 8 template method pattern

템플릿메소드

Page 27: Desing pattern study 8 template method pattern

Arrays.sort() 내부 구조

sort() legacyMergeSort() mergeSort()

Page 28: Desing pattern study 8 template method pattern

mergeSort안의 compareTo()

Index가몇개안될때→ insertionSort

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

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

Page 29: Desing pattern study 8 template method pattern
Page 30: Desing pattern study 8 template method pattern