[디자인 패턴][행동 패턴] 템플릿 메서드 패턴(Template Method Pattern)
Updated:
1. 개요
알고리즘의 뼈대를 정의하고, 구체적인 기능은 서브 클래스에 구현하도록 하는 패턴
템플릿 메서드 패턴(Template Method Pattern)은 행동 패턴(Behavioral Pattern)의 한 종류로, 공통된 기능을 상위 클래스에 정의하고, 자주 변경되며 확장되는 기능을 서브 클래스에 구현하여 효율적으로 재사용 가능하도록 한 패턴이다.
2. 행동 패턴(Behavioral Pattern)
2-1. 행동 패턴이란?
행동 패턴이란 처리의 책임을 어떤 객체에게 할당하는 것이 좋은지, 알고리즘을 어떤 객체에 정의하는 것이 좋은지 등의 책임 분배와 관련된 패턴이다.
2-2. 행동 패턴 종류
3. 구성
[출처 : GoF의 디자인 패턴]
-
AbstractClass : 알고리즘의 뼈대가 되는 공통 기능을 정의한 클래스
-
ConcreteClass : 구체적인 기능을 구현한 서브 클래스
4. 예제 코드
커피를 만드는 코드를 구현한다고 가정해보자. Template Method Pattern을 이용하면 서브 클래스를 통해 다양한 종류의 커피를 만들 수 있다.
4-1. AbstractClass
[Coffee.java]
1
2
3
4
5
6
7
8
9
10
11
12
public abstract class Coffee {
abstract void base();
abstract void syrup();
abstract void beans();
public final void makeCoffee() {
base();
syrup();
beans();
}
}
4-2. ConcreteClass
[Americano.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Americano extends Coffee {
@Override
void base() {
System.out.println("Water");
}
@Override
void syrup() {
System.out.println("No Syrup");
}
@Override
void beans() {
System.out.println("Columbia Beans");
}
}
[VanillaLatte.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class VanillaLatte extends Coffee {
@Override
void base() {
System.out.println("Milk");
}
@Override
void syrup() {
System.out.println("Vanilla Syrup");
}
@Override
void beans() {
System.out.println("Brazil Beans");
}
}
5. 테스트
[Clinet.java]
1
2
3
4
5
6
7
8
9
10
11
12
public class Client {
public static void main(String[] args) {
Coffee coffee = new Americano();
System.out.println("=== Americano ===");
coffee.makeCoffee();
coffee = new VanillaLatte();
System.out.println("=== Vanilla Latte ===");
coffee.makeCoffee();
}
}
[실행 결과]
6. 특징
-
확장 용이 : 서브 클래스를 통한 확장의 용이
-
코드의 중복 감소 : 공통기능을 추상 클래스에 정의하여 코드의 중복 감소
-
클래스 관리의 어려움 : 상위 클래스가 바뀌면 모든 하위클래스를 수정해야 함
Leave a comment