사용 목적
- 실제 행위를 정의하는 클래스를 구현하기 위한 일종의 알고리즘 프레임워크의 구현
- 오퍼레이션에 알고리즘의 기본 골격 구조를 정의하고 구체적인 단계를 서브클래스에서 구현하여 알고리즘 처리의 재 정의 편의성 향상
Use when
- 부모 클래스에서 하위 클래스의 행위를 수행을 위해 정형화 된 호출 방식을 가져야 하는 경우
- 여러 클래스에서 사용되는 공통의 행위를 하나의 클래스로 묶어야 하는 경우
구조
위 Class diagram에서 부모클래스(추상클래스)에 TemplateMethod 를 정의하였고, 해당 Template mathod 에서 primitive를 수행 해 주고 있다.
부모 클래스를 상속받은 자식 클래스들은 primitive에 해당하는 상세 구현만 클래스 내에서 구현하면 되고, 이미 구현 된 templateMethod 의 알고리즘 수행 흐름은 자식 클래스 변경에 영향을 받지 않는다. ( 실제 결과는 영향을 받을 수 있다. )
간단한 예시로 데이터를 만들어 파일에 쓰는 경우 아래처럼 만들어 보았다.
FileWriter의 writer 메서드는 formatting 메서드를 호출하고 그 결과를 파일로 쓰는 (write) 메서드이다.
이 구조에서는 FileWriter 클래스의 writer 메서드가 하나의 template method라고 볼 수 있으며, 하위 클래스의 formatting 결과에 따라 실제로 쓰여지는 결과는 달라지게 된다.
여기서 결과는 달라지지만, writer 메서드 내에 구현되어 있는 알고리즘 템플릿은 변하지 않게 되는게 템플릿 메서드 패턴의 특징이 되겠다.
관련 패턴
템플릿메서드 패턴과 관련이 있는 패턴은 전략패턴, 팩토리메서드 패턴이 있다.
전략패턴
Template method 패턴과 Strategy 패턴은 알고리즘을 교체한다는 점에서 행위가 유사하게 보일 수 있다. 전략 패턴과 템플릿메서드 패턴의 차이는 전략패턴은 알고리즘 전체를 객체로 교체한지만 템플릿메서드는 특정 알고리즘의 일부를 ConcreteClass 구현으로 대체한다는 차이가 존재한다.
팩토리메서드 패턴
팩토리메서드 패턴은 템플릿 메서드의 특별한 사용케이스에 대한 패턴이다.