1. 용도
객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스 쪽으로 미룹니다. 알고리즘의 구조 자체는 그대로 놔둔 채 알고리즘 각 단계 처리를 서브클래스에서 재정의할 수 있게 합니다.
2. 활용성
- 어떤 한 알고리즘을 이루는 부분 중 변하지 않는 부분을 한 번 정의해 놓고 다양해질 수 있는 부분은 서브클래스에서 정의할 수 있도록 남겨두고자 할 때
- 서브클래스 사이의 공통적인 행동을 추출하여 하나의 공통 클래스에 몰아둠으로써 코드 중복을 피하고 싶을 때
- 서브 클래스의 확장을 제어할 수 있습니다. 템플릿 메서드가 어떤 특정한 시점에 훅 연산을 호춣하도록 정의함으로써, 그 특정 시점에서만 확장되도록 합니다.
3. Class Diagram과 구조
[AbstractClass] - 서브 클래스들이 재정의를 통해 구현해야 하는 알고리즘 처리 단계 내의 기본 연산을 정의합니다.
[ConcreteClass] - 서브클래스마다 달라진 알고리즘 처리 단계를 수행하기 위한 기본 연산을 구현합니다.
ConcreteClass는 AbstractClass를 통하여 알고리즘의 변하지 않는 처리 단계를 구현합니다.
4. 장단점
장점
- 코드 재사용
- 부모 클래스에 정의된 연산을 명시적 호출 및 재정의를 통해 부모 클래스 연산의 행동을 확장
5. 구현 방법
- C++의 접근 제한 방법 이용 - protected 멤버로 구현하여, 연산들이 템플릿 메서드만 호출할 수 있도록 합니다. 오버라이드 해야 하는 기본 연산은 반드시 순수 가상 함수로, 템플릿 메서드는 비가상 멤버 함수로 정의합니다.
- 기본 연산의 수의 최소화 - 서브클래스가 알고리즘을 실체화하기 위해 오버라이드해야 하는 기본 연산의 개수를 줄여 재정의 해주어야하는 양을 줄입니다.
- 이름을 짓는 규칙을 만듭니다 - 재정의가 필요한 연산ㅇ느 식별이 잘 되도록 접두사를 붙입니다.
'C++공부 > GoF의 디자인 패턴' 카테고리의 다른 글
적응자(Adapter) (0) | 2022.07.06 |
---|---|
방문자(Visitor) (0) | 2022.06.01 |
전략(Strategy) (0) | 2022.06.01 |
상태(State) (0) | 2022.06.01 |
감시자(Observer) (0) | 2022.06.01 |