8장 : 템플릿 메소드 패턴
템플릿 메소드 패턴
템플릿 메소드에서는 알고리즘의 각 단계들을 정의하며, 그 중 한 개 이상의 단계가 서브클래스에 의해 제공될 수 있습니다.
템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있습니다.
언제 사용 ?
구현 방법
장단점
템플릿 메소드 vs 스트래티지 vs 팩토리 메소드
템플릿 메소드 패턴 : 알고리즘의 일부 단계를 구현하는 것을 서브클래스에서 처리합니다.
스트래티지 패턴 : 바꿔 쓸 수 있는 행동을 캡슐화하고, 어떤 행동을 사용할지는 서브클래스에 맡깁니다.
팩토리 메소드 패턴 : 어떤 구상 클래스를 생성할지를 서브클래스에서 결정합니다.
템플릿 메소드를 이용해서 정렬하기 : compareTo()
Refactoring Guru Code & Diagram
핵심 정리
“템플릿 메소드”에서는 알고리즘의 단계들을 정의하는데, 일부 단계는 서브클래스에서 구현하도록 할 수 있습니다.
템플릿 메소드 패턴을 코드 재사용에 크게 도움이 됩니다.
템플릿 메소드가 들어있는 추상 클래스에서는 구상 메소드, 추상 메소드, 후크를 정의할 수 있습니다.
추상 메소드는 서브클래스에서 구현합니다.
후크(hook)는 추상 클래스에 들어있는, 아무 일도 하지 않거나 기본 행동을 정의하는 메소드로, 서브클래스에서 오버라이드할 수 있습니다.
서브클래스에서 템플릿 메소드에 들어있는 알고리즘을 함부로 바꾸지 못하게 하고 싶다면 템플릿 메소드를 final로 선언하면 됩니다.
할리우드 원칙에 의하면, 저수준 모듈을 언제 어떻게 호출할지는 고수준 모듈에서 결정하는 것이 좋습니다.
템플릿 메소드 패턴은 실전에서도 꽤 자주 쓰이지만 반드시 “교과서적인” 방식으로 적용되진 않습니다.
스트래티지 패턴과 템플릿 메소드 패턴은 모두 알고리즘을 캡슐화하는 패턴이지만 전자에서는 구성을, 후자에서는 상속을 이용합니다.
팩토리 메소드 패턴은 특화된 템플릿 메소드 패턴입니다.
Last updated