SlideShare a Scribd company logo
DESIGN PATTERN STUDY8.
Template Method Pattern
알고리즘 캡슐화
• 본 PPT는 Design Patterns Study를 위해 작성되었습니다.
• Study에 사용한 교재는 한빛미디어에서 나온
• [Head First Desgin Patterns]을 사용하였습니다.
• Written by 서울시립대 이희태 For study with
NHN 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
HumanOldHo
use
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에서 구현
Desing pattern study 8 template method pattern
Desing pattern study 8 template method pattern

More Related Content

Viewers also liked

『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
복연 이
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴
Hyunho-Cho
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1
ukjinkwoun
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php version
ukjinkwoun
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
hyun soomyung
 
Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123
dragor0123
 
Learn design pattern-1
Learn design pattern-1Learn design pattern-1
Learn design pattern-1
Daniel Lim
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
Daniel Lim
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
Daniel Lim
 
Game Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM patternGame Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM pattern
Young Ha Kim
 
소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법
Jay Park
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
Bingu Shim
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
bbongcsu
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
knight1128
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
Jay Park
 

Viewers also liked (15)

『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴
 
Clean code chapter1
Clean code chapter1Clean code chapter1
Clean code chapter1
 
Tobi 스프링 2장 php version
Tobi 스프링 2장   php versionTobi 스프링 2장   php version
Tobi 스프링 2장 php version
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123Design pattern study 4 factory pattern _ by dragor0123
Design pattern study 4 factory pattern _ by dragor0123
 
Learn design pattern-1
Learn design pattern-1Learn design pattern-1
Learn design pattern-1
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
Game Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM patternGame Design patterns, Visitor, State, FSM pattern
Game Design patterns, Visitor, State, FSM pattern
 
소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법소프트웨어 설계 악취: 기술 부채 관리 방법
소프트웨어 설계 악취: 기술 부채 관리 방법
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]Refactoring tutorial 1주차[refactoring 개요]
Refactoring tutorial 1주차[refactoring 개요]
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 

Similar to Desing pattern study 8 template method pattern

[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
대영 노
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
한 경만
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
Joeun Park
 
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
대박성진 DaeBak.Sungjin
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
ChangHyeon Bae
 
[RLkorea] 각잡고 로봇팔 발표
[RLkorea] 각잡고 로봇팔 발표[RLkorea] 각잡고 로봇팔 발표
[RLkorea] 각잡고 로봇팔 발표
ashley ryu
 

Similar to Desing pattern study 8 template method pattern (6)

[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
(진성리더십 특강) 일과 삶의 문제를 드라이브하라! 퍼스널 애자일, 퍼스널 칸반
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
[RLkorea] 각잡고 로봇팔 발표
[RLkorea] 각잡고 로봇팔 발표[RLkorea] 각잡고 로봇팔 발표
[RLkorea] 각잡고 로봇팔 발표
 

Desing pattern study 8 template method pattern

  • 1. DESIGN PATTERN STUDY8. Template Method Pattern 알고리즘 캡슐화
  • 2. • 본 PPT는 Design Patterns Study를 위해 작성되었습니다. • Study에 사용한 교재는 한빛미디어에서 나온 • [Head First Desgin Patterns]을 사용하였습니다. • Written by 서울시립대 이희태 For study with NHN NEXT2기 조현호 서 울 시 립 대 이 희 태
  • 3. 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. 출처 – 네이버 영영사전
  • 4. 커피 vs 홍차 커피 만드는 법 홍차 만드는 법 1. 물을 끓인다. 2. 끓는 물에 커피를 우려낸다. 3. 커피를 컵에 따른다. 4. 설탕과 우유를 추가한다. 1. 물을 끓인다. 2. 끓는 물에 차를 우려낸다. 3. 차를 컵에 따른다. 4. 레몬을 추가한다.
  • 5.
  • 7. 둘 다 똑같이 물에다가 “우려낸다.” 둘 다 똑같이 무언가를 “첨가한다.”
  • 8. 커피 vs 홍차 커피 만드는 법 홍차 만드는 법 1. 물을 끓인다. 2. 끓는 물에 커피를 우려낸다. 3. 컵에 따른다. 4. 설탕,우유를첨가물을추가한다. 1. 물을 끓인다. 2. 끓는 물에 차를 우려낸다. 3. 컵에 따른다. 4. 레몬을 첨가물을 추가한다.
  • 9. 카페인 음료 만드는 법 1. 물을 끓인다. 2. 우려낸다. 3. 컵에 따른다. 4. 첨가물을 추가한다.
  • 10. CaffeinBeverage를 확장한 DerivedClass에서 이 메소드 들을 정의한다. Template Method
  • 11.
  • 12. 템플릿 메소드 패턴 정의 • Def. 템플릿 메소드 패턴에서는 알고리즘의 골격을 정의 합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘 의 구조는 그대로 유지하면서 서브클래스에서 특정 단계 를 재정의할 수 있습니다.
  • 13. UML 다이어그램 TemplateMethod() 안에서 primitiveOperation1,2…등을 활용한다. TemplateMethod 알고리즘 자체는 primitiveOperation들의 구체적인 구현과 는 분리되어 있다. primitiveOperation1,2는 ConcreteClass에서 구현한다. abstract method
  • 14. 코드 탐구 Hook: 기본적으로 아무것도 하지 않는 메소드 이 메소드들은 subclass에서 정의해준다.
  • 15. Hook란? Super Class에서 선언되긴 하지만 기본적으로 아무것도 구현되어 있지 않거 나 내용이 거의 없는 메소드. SubClass에서 구현해도 되고 안 해도 된다. Hook
  • 17.
  • 18. 헐리우드 원칙(HollyWood Principle) 먼저 연락하지 마세요. 저희가 연락 드리겠습니다. 디자인 원칙 7. 헐리우드 원칙을 사용하면 “의존성 부패(dependency rot)”를 방지할 수 있다. 저수준 구성요소에서 시스템에 접속할 수 있지만, 언제 어떻게 그 구성요 소들을 사용할지는 고수준 구성요소에서 결정하게 된다. 즉, 고수준 구성 요소에서 저수준 구성요소에게 “먼저 연락하지 마세요. 제가 먼저 연락 드 리겠습니다.”라고 얘기하는 것과 같다.
  • 19. 의존성 부패 Ant AntHouse House HumanOldHo use Bugs 어떤 고수준 구성요소가 저수준 구성요소에 의존하고, 그 저수준 구성요소가 다시 고수준 구성요소에 의존하고, 또 그 고수준이 다른 저수준에……. 이런 식으로 클래스 사이의 의존관계가 복잡하게 꼬여있는 것
  • 20. 플러그에 콘세트를 맞춰야 할까? 콘센트에 플러그를 맞춰야 할까?
  • 21. 헐리우드원칙과 템플릿 메소드 패턴 prepareRecipe() boilWater() brew() pourInCup() addCondiments() CaffeinBeverage brew() addCondiments() Coffee brew() addCondiments() Tea CaffeinBeverage에서 음료 를 만드는 알고리즘 (template method)을 장악 하고 있다. brew(), addCondiments() 같은 메소드의 구현이 필요할 때에만 서브클래 스를 불러낸다. Coffee와 Tea에서 먼저 추상 클래스를 직접 호출하지 않는다!
  • 22. Q1. 헐리우드 원칙 vs 의존성 뒤집기 원칙 추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다. 의존성뒤집기 원칙 공통점 : 1. 객체를 분리시킨다. 2. 클래스가 상호관계가 되지 않도록 만든다. 차이점 : 1. 의존성을 피하는 방법에 있어서 의존성 뒤집기 원칙이 훨씬 더 강 력하고 일반적인 내용을 담고 있다. 2. 헐리우드 원칙은 저수준 구성요소들을 다양하게 사용할 수 있으면 서도, 다른 클래스가 그러한 구성요소에 너무 의존하지 않게 만들 어주는 디자인을 구현하도록 도와준다.
  • 23. 오리 5형제입니다! 이 친구들을 무게 순으로 정렬해볼까요?? 숙녀에게 무게를 묻 는 건 실례라구요!
  • 24.
  • 27. Arrays.sort() 내부 구조 sort() legacyMergeSort() mergeSort()
  • 28. mergeSort안의 compareTo() Index가 몇 개 안될 때 → insertionSort 그렇지 않을 경우 mergeSort알고리즘 사용 템플릿 메소드 패턴의 primitiveOperation() …Duck에서 구현