8장 : 템플릿 메소드 패턴

템플릿 메소드 패턴

  • 템플릿 메소드에서는 알고리즘의 각 단계들을 정의하며, 그 중 한 개 이상의 단계가 서브클래스에 의해 제공될 수 있습니다.

  • 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있습니다.

헐리우드 원칙

  • 먼저 연락하지 마세요. 저희가 연락드리겠습니다.

  • 할리우드 원칙을 사용하면, 저수준 구성요소에서 시스템에 접속을 할수는 있지만, 언제 어떤 식으로 그 구성요소들을 사용할지는 고수준 구성요소에서 결정하게 된다.

언제 사용 ?

구현 방법

장단점

템플릿 메소드 vs 스트래티지 vs 팩토리 메소드

  • 템플릿 메소드 패턴 : 알고리즘의 일부 단계를 구현하는 것을 서브클래스에서 처리합니다.

  • 스트래티지 패턴 : 바꿔 쓸 수 있는 행동을 캡슐화하고, 어떤 행동을 사용할지는 서브클래스에 맡깁니다.

  • 팩토리 메소드 패턴 : 어떤 구상 클래스를 생성할지를 서브클래스에서 결정합니다.

템플릿 메소드를 이용해서 정렬하기 : compareTo()

Refactoring Guru Code & Diagram

핵심 정리

  • “템플릿 메소드”에서는 알고리즘의 단계들을 정의하는데, 일부 단계는 서브클래스에서 구현하도록 할 수 있습니다.

  • 템플릿 메소드 패턴을 코드 재사용에 크게 도움이 됩니다.

  • 템플릿 메소드가 들어있는 추상 클래스에서는 구상 메소드, 추상 메소드, 후크를 정의할 수 있습니다.

  • 추상 메소드는 서브클래스에서 구현합니다.

  • 후크(hook)는 추상 클래스에 들어있는, 아무 일도 하지 않거나 기본 행동을 정의하는 메소드로, 서브클래스에서 오버라이드할 수 있습니다.

  • 서브클래스에서 템플릿 메소드에 들어있는 알고리즘을 함부로 바꾸지 못하게 하고 싶다면 템플릿 메소드를 final로 선언하면 됩니다.

  • 할리우드 원칙에 의하면, 저수준 모듈을 언제 어떻게 호출할지는 고수준 모듈에서 결정하는 것이 좋습니다.

  • 템플릿 메소드 패턴은 실전에서도 꽤 자주 쓰이지만 반드시 “교과서적인” 방식으로 적용되진 않습니다.

  • 스트래티지 패턴과 템플릿 메소드 패턴은 모두 알고리즘을 캡슐화하는 패턴이지만 전자에서는 구성을, 후자에서는 상속을 이용합니다.

  • 팩토리 메소드 패턴은 특화된 템플릿 메소드 패턴입니다.

Last updated