작심삼일

4주차-2. Template Method 본문

스터디/디자인 패턴

4주차-2. Template Method

yun_s 2021. 5. 13. 23:26
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

이 패턴도 개념은 이해하기 쉬웠다.

이름이 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와의 큰 차이는 서브클래스의 제어 여부라고 생각한다. 이 결론이 맞게 내려진 것이라면 좋겠지만, 틀린 것이라면 더 공부해 그 둘의 명확한 차이를 마음으로 와닿게 이해하고 싶다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

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
Comments