[JAVA/디자인패턴] Template Method Pattern, 템플릿 메서드 패턴
2023. 12. 5. 13:01
반응형
Template Method Pattern
템플릿 메서드 패턴은 알고리즘의 구조를 정의하면서 일부 단계를 서브클래스로 미루는 패턴이다.
알고리즘의 뼈대를 상위 클래스에서 정의하고, 일부 단계를 서브클래스에서 구현하도록 한다. 이렇게 함으로써 알고리즘의 구조를 재사용할 수 있으면서도 일부 단계를 서브클래스에서 변경할 수 있게 한다.
음료수 템플릿 메서드
// AbstractClass
abstract class BeverageTemplate {
// 템플릿 메소드
final void prepareBeverage() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew(); // 추상 메소드
abstract void addCondiments(); // 추상 메소드
void boilWater() {
System.out.println("물 끓이기");
}
void pourInCup() {
System.out.println("컵에 따르기");
}
}
// ConcreteClass
class Coffee extends BeverageTemplate {
@Override
void brew() {
System.out.println("커피 내리기");
}
@Override
void addCondiments() {
System.out.println("설탕과 우유 추가하기");
}
}
// ConcreteClass
class Tea extends BeverageTemplate {
@Override
void brew() {
System.out.println("차 우려내기");
}
@Override
void addCondiments() {
System.out.println("레몬 추가하기");
}
}
이 예제에서 BeverageTemplate는 음료를 만들기 위한 알고리즘의 뼈대를 제공한다. 구체 클래스인 Coffee와 Tea는 이 뼈대를 상속받아 일부 단계를 구체적으로 구현한다. 이렇게 함으로써 음료를 만드는 알고리즘의 구조를 템플릿 메소드로 정의하고, 각 음료에 특화된 단계는 서브클래스에서 구현할 수 있다.
Arrays.Sort
public class MyType implements Comparable<MyType> {
private int value;
public MyType(int value){
this.value = value;
}
@Override
public int compareTo(MyType comp) {
// 이 객체의 value와 다른 객체의 value를 비교하여 순서를 결정
return Integer.compare(comp.value, this.value);
}
@Override
public String toString(){
return this.value + "";
}
}
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
MyType[] myArray = {new MyType(5), new MyType(2), new MyType(8)};
Arrays.sort(myArray);
System.out.println(Arrays.toString(myArray));
}
}
Sort 함수는 템플릿 메서드와 같이 구현을 서브클래스에 위임한 케이스이다.
compareTo를 구현하는 것을 통해서 정렬 방식은 서브클래스인 자료형에 위임하면서, Arrays.sort라는 템플릿 메서드를 통해 정렬을 수행한다.
반응형
'CS > Design pattern' 카테고리의 다른 글
[JAVA/디자인패턴] MVC Pattern, MVC 패턴 (0) | 2023.12.11 |
---|---|
[JAVA/디자인패턴] Composite Pattern, 컴포지트 패턴 (0) | 2023.12.05 |
[JAVA/디자인패턴] Command Pattern, 커맨드 패턴 (0) | 2023.11.29 |
[JAVA/디자인패턴] State Pattern, 상태 패턴 (2) | 2023.11.29 |
[JAVA/디자인패턴] Facade Pattern, 퍼사드 패턴 (0) | 2023.11.27 |