일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 디자인패턴
- 파이썬
- 노드
- Node
- Redux
- graphQL
- 주짓떼로
- 리액트
- Express
- web
- 웹개발
- 프로그래밍
- development
- 하프가드
- 주짓떼라
- 영화
- 솔로드릴
- 클로즈가드
- 영화리뷰
- JavaScript
- 개발자
- 드릴
- 자바스크립트
- 엄티로드
- nodejs
- REACT
- git
- 주짓수
- 영화감상
- 개발
- Today
- Total
As i wish
[Design pattern] Template method pattern (템플릿 메서드 패턴) 본문
안녕하세요.
오늘 포스팅해볼 패턴은 템플릿 메서드 패턴입니다.
일단 정의 부터 알아보겠습니다.
템플릿 메서드 패턴이란?
메서드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메서드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다.
말 그대로 알고리즘 골격을 정의하고 알고리즘의 여러 단계 중 일부를 서브 클래스에서 구현하는 것이죠.
어렵지 않은 패턴이죠.
예를 들어 커피와 티를 만든다고 하였을 때에
- 커피 만드는 법
1. 물을 끓인다.
2. 끓는 물에 커피를 우려낸다.
3. 커피를 컵에 따른다.
4. 설탕과 우유를 추가한다.
- 홍차 만드는 법
1. 물을 끓인다.
2. 끓는 물에 차를 우려낸다.
3. 차를 컵에 따른다.
4. 레몬을 추가한다.
요렇게 거의 비슷한 알고리즘을 가지고 있죠.
이에 따라 CaffeineBeverage라는 추상 클래스를 만들고 prepareRecipe()라는 메서드를 만들어서
위와 같은 알고리즘을 구성하죠.
중복되는 방법 인 1. 물을 끓인다, 3. 차를 컵에 따른다. 는 추상 클래스(CaffeineBeverage)에서 구현을 하고
나머지인 2, 4 번은 서브클래스에서 구현을 하는 것이죠.
즉, 1 ~ 4번에 알고리즘 중에 몇 가지 (2, 4번)을 서브클래스에서 구현하기 때문에 템플릿 메서드 패턴을 적용했다고 볼 수 있죠.
역시 코드로 만나보겠습니다!
# -*- coding: utf-8 -*-
# TemplateMethod Pattern
import abc
class CaffeineBeverage:
__metaclass__ = abc.ABCMeta
def prepareRecipe(self):
self.boilWater()
self.brew()
self.pourInCup()
self.addCondiments()
def boilWater(self):
print "Boil water"
def pourInCup(self):
print "Pour in cup"
@abc.abstractmethod
def brew(self):
pass
@abc.abstractmethod
def addCondiments(self):
pass
class Coffee(CaffeineBeverage):
def brew(self):
print "Making coffee"
def addCondiments(self):
print "Add milk and sugar"
class Tea(CaffeineBeverage):
def brew(self):
print "Making tea"
def addCondiments(self):
print "Add lemon"
coffee = Coffee()
tea = Tea()
coffee.prepareRecipe()
tea.prepareRecipe()
이렇게 서브클래스인 Coffee, Tea에서 추상클래스 안에 메서드 알고리즘의 한부분을 구현 함으로써 템플릿 메서드 패턴을 완성 할 수 있죠.
이렇게 되면 알고리즘이 한곳에 몰려 있기 때문에 관리하기도 쉽고 새로운 서브클래스를 만들기도 한결 편하겠죠?
'Design Pattern' 카테고리의 다른 글
[Design pattern] Composite pattern (컴포지트 패턴) (0) | 2019.05.23 |
---|---|
[Design pattern] Iterator pattern (이터레이터 패턴) (0) | 2019.05.13 |
[Design pattern] 데코레이터 vs 어댑터 vs 퍼사드 패턴 (0) | 2019.04.22 |
[Design pattern] Facade pattern (퍼사드패턴) (0) | 2019.04.22 |
[Design pattern] Adapter pattern (어댑터패턴) (0) | 2019.04.22 |