공부기록

1022 템플릿메서드 본문

JAVA

1022 템플릿메서드

gracelove91 2019. 10. 22. 17:20
반응형

템플릿

  • 틀이나 견본을 의미.

템플릿 메서드

  • 추상메서드나 구현된 메서드를 활용하여 프로그램 전체의 흐름(시나리오) 를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 함.

템플릿 메서드 패턴

  • 디자인패턴의 일종.
  • 프레임 워크에서 많이 사용되는 설계패턴.
  • 추상클래스로 선언된 상위 클래스에서 추상메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임함.

Car.java (추상클래스)

public abstract class Car {
    public void startCar() {
        System.out.println("엔진시동을 겁니다.");
    }

    public void turnOff() {
        System.out.println("엔진시동을 끕니다.");
    }

    public abstract void drive();

    public abstract void stop();

    /**
     * 템플릿 메서드.
     * 추상메서드나 구현된 메서드를 활용하여 프로그램 전체의 흐름(시나리오) 를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 함.
     */
    final public void run() {
        startCar();
        drive();
        stop();
        turnOff();
    }
}

AiCar.java (컨크리트 클래스)

public class AiCar extends Car {
    @Override
    public void drive() {
        System.out.println("인공지능 자동차가 자율 주행합니다");
    }

    @Override
    public void stop() {
        System.out.println("인공지능 자동차가 스스로 멈춥니다.");
    }
}

ManualCar.java (컨크리트 클래스)

package me.grace.template;

public class ManualCar extends Car {

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

    @Override
    public void stop() {
        System.out.println("사람이 브레이크를 밟습니다.");
    }
}

App.java (클라이언트 역할)

public class App {
    public static void main(String[] args) {
        Car aiCar = new AiCar();
        aiCar.run();

        Car manualCar = new ManualCar();
        manualCar.run();
    }
}
반응형