파이썬 디자인 패턴 - 8. 템플릿 메소드 패턴

 

관련 코드는 8장. 템플릿 메소드 패턴 - 알고리즘의 캡슐화를 참조


8장. 템플릿 메소드 패턴 - 알고리즘의 캡슐화

8.1 템플릿 메소드 패턴 개요

템플릿 메소드 패턴
알고리즘의 일부 단계를 서브클래스화해 알고리즘의 부분적 수정 및 재정의를 쉽게 함
템플릿 메소드 패턴의 서브클래스를 재정의해 완전히 다른 기능이나 알고리즘을 쉽게 구현할 수 있음 \

8.1.1 원시 연산(Primitive Operation)

원시 연산
템플릿 메소드 패턴의 알고리즘의 각 단계

  • 각 단계에는 추상 메소드가 정의돼 있고 템플릿 메소드가 전체 알고리즘을 구현
  • 추상 클래스인 ConcreteClass는 각 단계별 기능을 구현

8.1.2 템플릿 메소드 패턴이 적합한 상황

  • 여러 알고리즘 또는 클래스가 비슷하거나 같은 로직을 구현할 때
  • 알고리즘을 단계별로 서브클래스화해 코드의 중복을 줄일 수 있는 경우
  • 서브클래스를 오버라이드해 여러 알고리즘을 구현할 수 있는 경우


8.2 템플릿 메소드 패턴 이해

8.2.1 템플릿 메소드 패턴의 목적

  • 알고리즘의 뼈대를 원시 연산으로 구현
  • 알고리즘의 구조를 수정하지 않고 일부 서브클래스를 재정의
  • 코드의 재사용과 중복 최소화
  • 공통 인터페이스 및 구현 활용

8.2.2 템플릿 메소드 패턴의 구성원

  1. AbstractClass
    알고리즘의 단계를 정의하는 인터페이스
  2. ConcreteClass
    여러 추상 메소드로 구성된 알고리즘의 서브클래스를 구현
  3. template_method()
    전체 알고리즘을 정의하는 여러 단계별 메소드를 호출


8.3 템플릿 메소드 패턴 - 후크

후크(Hook)
추상 클래스에 정의된 메소드

  • 후크는 서브클래스가 알고리즘 중간 단계를 제어할 수 있는 기능을 제공 (필수 X) \
  • 서브클래스가 반드시 구현해야 하는 부분은 추상 메소드를 사용하고 선택적인 부분은 후크를 사용


8.4 할리우드 원칙과 템플릿 메소드

할리우드 원칙(Hollywood Principle)
“Don’t call us, we’ll call you.”
상위 요소가 하위 요소에 대한 접근 및 필요성을 직접 결정한다는 개념
객체지향에서 하위 요소는 할리우드 원칙을 기반으로 메인 시스템에 끼어 들어갈 수 있음(hook)

비슷하게 템플릿 메소드 패턴에서는 상위추상 클래스가 알고리즘에 필요한 단계를 정리하여 알고리즘에 따라 각 단계에 맞는 하위 클래스가 호출됨


8.5 템플릿 메소드 패턴의 장단점

장점

  • 코드 중복이 없음
  • 컴포지션이 아닌 상속을 사용하므로 코드를 재활용할 수 있음
  • 알고리즘의 각 단계를 서브클래스에서 구현할 수 있는 유연성을 제공

단점

  • 코드 디버깅 및 이해가 어려울 수 있음. 에러 핸들링과 문서화가 필수적
  • 어떤 계층이라도 수정한다면 전체 구조 및 구현에 영향을 줄 수 있어 유지보수가 어려움