프로그래밍 언어/JAVA(자바) 응용

31.추상 클래스 - 템플릿 메서드 패턴

lroot 2022. 5. 24. 23:23
728x90
반응형

템플릿 메서드

- 추상 메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드

- final로 선언하여 하위 클래스에서 재정의 할 수 없게 함

- 프레임워크에서 많이 사용되는 설계 패턴

- 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현하도록 함

 

템플릿 메서드 예제

- Car.java

public abstract class Car {

public abstract void drive();
public abstract void stop();

public void startCar() {
System.out.println("engine start");
}

public void endCar() {
System.out.println("engine end");
}

final public void run() {
startCar();
drive();
stop();
endCar();
}

}

 

- AiCar.java

public class AiCar extends Car{

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

@Override
public void stop() {
System.out.println("장애물 앞에서 스스로 멈춥니다.");

}


}

 

- ManualCar.java

public class ManualCar extends Car{

@Override
public void drive() {
System.out.println("직접 주행을 합니다.");
System.out.println("직접 방향을 바꿉니다.");
}

@Override
public void stop() {
System.out.println("장애물 앞에서 브레이크로 멈춥니다.");

}

}

 

- Test.java

public class Test {

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

System.out.println("\n");

Car manualcar = new ManualCar();
manualcar.run();


}

}

 

final 예약어

- final 변수 : 값이 변경될 수 없는 상수

public static final double PI = 3.14;

- final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드

- final 클래스 : 상속할 수 없는 클래스