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();
}
}
반응형