- Today
- Total
작심삼일
4주차-2. Template Method 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
이 패턴도 개념은 이해하기 쉬웠다.
이름이 Template인 것처럼 알고리즘의 뼈대만 정의하고, 구체적인 수행 방법은 서브클래스에서 정의한다.
하지만 곧 Factory method와 헷갈리기 시작했다.내 스스로 정리해본 결과, Factory method보다 Template method가 좀 더 작은 내용인 것 같다.밑에도 써놨지만, 서브클래스의 확장을 제어하기 때문이다.
어떻게 쓰는가
대부분의 기능은 같지만, 사소한 부분이 다를 때 주로 사용한다.
또한 동시에 서브클래스를 어느 정도 제어하고 싶을 때도 사용한다.
많은 분들이 커피 만드는 것을 예시로 드는데, 이 예시가 좋은 것 같다.
아메리카노와 라떼를 만드는 과정은 컵을 꺼내고 에스프레소를 붓는 것까지 동일하다. 그 이후에 물을 붓느냐, 우유를 붓느냐에 따라 아메리카노나 라떼가 만들어진다.
중복되는 부분이 많기 때문에 Template method를 활용하면 코드 중복을 피할 수 있다.
class make_coffee:
def __init__(self):
cup()
espresso()
other()
def cup(self):
print('cup')
def espresso(self):
print('espresso')
@abstractmethod
def other(self):
pass
class Americano(make_coffee):
def other(self):
print('water')
class Latte(make_coffee):
def other(self):
print('milk')
어디서 활용되는가
이는 책의 내용 (p. 421)을 그대로 가져왔다.
1. 어떤 한 알고리즘을 이루는 부분 중 변하지 않는 부분을 한 번 정의해놓고 다양해질 수 있는 부분은 서브클래스에서 정의할 수 있도록 남겨두고자 할 때
이는 패턴의 정의와 같다고 볼 수 있다.
2. 서브클래스 사이의 공통적인 행동을 추출하여 하나의 공통 클래스에 몰아둠으로써 코드 중복을 피하고 싶을 때
3. 서브클래스의 확장을 제어(제한)할 수 있음
어디까지 확장하는 지나, 함수 실행 순서 등을 정할 수 있다.
My Opinion
Factory method와 많이 헷갈린다. 하지만 스스로 내린 결론으로는 Factory method와의 큰 차이는 서브클래스의 제어 여부라고 생각한다. 이 결론이 맞게 내려진 것이라면 좋겠지만, 틀린 것이라면 더 공부해 그 둘의 명확한 차이를 마음으로 와닿게 이해하고 싶다.
'스터디 > 디자인 패턴' 카테고리의 다른 글
5주차-2. State Pattern (0) | 2021.05.26 |
---|---|
5주차-1. Decorator Pattern (0) | 2021.05.26 |
4주차-1. Prototype (0) | 2021.05.13 |
3주차-2. Singleton (0) | 2021.04.30 |
3주차-1. Factory Method (0) | 2021.04.30 |