시냅스

템플릿 메소드 패턴 Java로 구현 본문

디자인 패턴

템플릿 메소드 패턴 Java로 구현

ted k 2022. 8. 17. 14:53

템플릿 메소드 패턴 Template Method Pattern

  • 상위 클래스에서는 전체적인 흐름을 구현하고 구체적인 처리는 하위 클래스에 위임
  • Operation 에 알고리즘의 기본 골격 구조를 정의하고 구체적인 단계는 서브클래스에 정의한다
  • 추상화된 함수를 통해서 알고리즘의 일부 단계를 정의함으로써 템플릿 메소드의 처리순서를 정할 수 있다.

 

AbstractClass

  • 서브 클래스들이 반드시 구현해야 하는 알고리즘 처리 단계 내의 기본 오퍼레이션이 무엇인지를 정의한다.
  • 서브 클래스에서 이들 오퍼레이션들을 구현한다.
  • Hook method : 추상 클래스 내에 선언(declaration)되어 있는 메소드이지만, 기본적인 내용만 있거나 아무 내용도 들어있지 않음
  • template method는 final 키워드를 통해 변경되지 못하도록 한다.

ConcreteClass

  • 상위 클래스에서 선언된 추상 메서드를 구현하거나 이미 구현된 메서드를 재정의한다

 

구현

package templatemethod;

abstract class Car {
    public void startCar(){
        System.out.println("시동을 켭니다.");
    }
    public abstract void drive();
    public abstract void stop();
    public void turnOff(){
        System.out.println("시동을 끕니다.");
    }
    public final void run() { // template method
        startCar();
        drive();
        stop();
        turnOff();
    }
}

class AICar extends Car {
    @Override
    public void drive() {
        System.out.println("자율주행합니다.");
    }

    @Override
    public void stop() {
        System.out.println("자동차가 스스로 방향을 바꿉니다.");
    }
}

class ManualCar extends Car {
    @Override
    public void drive() {
        System.out.println("사람이 운전합니다.");
    }

    @Override
    public void stop() {
        System.out.println("브레이크를 밟아서 정지합니다.");
    }
}



public class TemplateMethodImpl {
    public static void main(String[] args) {
        AICar aiCar = new AICar();
        aiCar.run();

        System.out.println("============");
        ManualCar manualCar = new ManualCar();
        manualCar.run();
    }
}
Comments