[JAVA/디자인패턴] Template Method Pattern, 템플릿 메서드 패턴

2023. 12. 5. 13:01
반응형

 

Template Method Pattern

https://commons.wikimedia.org/wiki/File:ClassDiagramTemplateMethod.png

 

 

템플릿 메서드 패턴은 알고리즘의 구조를 정의하면서 일부 단계를 서브클래스로 미루는 패턴이다.

알고리즘의 뼈대를 상위 클래스에서 정의하고, 일부 단계를 서브클래스에서 구현하도록 한다. 이렇게 함으로써 알고리즘의 구조를 재사용할 수 있으면서도 일부 단계를 서브클래스에서 변경할 수 있게 한다.

 

 


음료수 템플릿 메서드

 

// 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는 음료를 만들기 위한 알고리즘의 뼈대를 제공한다. 구체 클래스인 CoffeeTea는 이 뼈대를 상속받아 일부 단계를 구체적으로 구현한다. 이렇게 함으로써 음료를 만드는 알고리즘의 구조를 템플릿 메소드로 정의하고, 각 음료에 특화된 단계는 서브클래스에서 구현할 수 있다.

 

 

 

 


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라는 템플릿 메서드를 통해 정렬을 수행한다.

반응형

BELATED ARTICLES

more