💡 템플릿이란 용어를 사전에서 찾아보면 틀이나, 견본을 의미한다
즉 , 틀이 있는 메서드라는 의미이다.📢 템플릿 메서드는 추상클래스를 사용하여 구현할 수 있다.
public abstract class Car
{
// 추상 메서드
public abstract void drive();
public abstract void stop();
// 일반 메서드
public void startCar()
{
System.out.println("시동을 켭니다.");
}
// 일반 메서드
public void turnOff()
{
System.out.println("시동을 끕니다.");
}
// 템플릿 메서드
final public void run()
{
startCar();
drive();
stop();
turnOff();
}
}////////////////// class
Car 클래스를 생성하였고, 이 클래스는 drive(), stop()
추상메서드와
3개의 구현된 메서드 start(), turnOff(), run()
을 가지고 있다.
자동차 시동을 켜고 끄는 방법은 어느 자동차나 동일하기에 미리 코드를 구현하였다.
drive() 와 turnOff()
는 차 종류에 따라서 다른 방식으로 움직일 수 있기에 추상메서드로 선언하였다.
템플릿 메서드인 run()
메서드는 자동차가 달리는 방법을 순서대로 구현하였다.
그러면 이제 Car 클래스를 상속받을 클래스를 2개 구현해보자
상속받을 클래스는 자율주행하는 AICar 클래스
와 보통자동차인ManualCar 클래스
이다.
두 클래스는 Car 클래스
를 상속받았기 때문에 구현되지 않은 추상 메서드를 마저 구현해야 한다.
public class AICar extends Car
{
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void drive()
{
System.out.println("자율 주행합니다.");
System.out.println("자동차가 알아서 방향을 전환합니다.");
}
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void stop()
{
System.out.println("스스로 멈춥니다.");
}
}////////////////// class
AICar 클래스
는 Car 클래스
를 상속받았고 drive() , stop()
추상 메서드를 구현 하였다.
AICar 클래스
는 자율주행을 하고 방향도 알아서 바꾼다.
public class ManualCar extends Car
{
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void drive()
{
System.out.println("사람이 운전합니다.");
System.out.println("사람이 핸들을 조작합니다.");
}
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void stop()
{
System.out.println("브레이크로 정지합니다.");
}
}////////////////// class
ManualCar 클래스
도 AICar 클래스
와 마찬가지로 Car 클래스
를 상속받았다.
그리고 추상메서드 drive() 와 stop()
을 구현했다.
ManualCar 클래스
는 직접 핸들을 조작하면서 달리고 정지를 하려면 브레이크를 밟으면 된다.
그러면 이제 테스트 프로그램을 만들어 이 두 자동차가 어떻게 움직이는지 확인해 보자
AICar 클래스
와 ManualCar 클래스
를 이용하여 테스트 프로그램 만들기
public class CarTest
{
public static void main(String[] args)
{
System.out.println("=== 자율 주행하는 자동차 ===");
// Car 클래스 형태로 AICar 객체생성
Car myCar = new AICar();
myCar.run();
System.out.println("=== 사람이 운전하는 자동차 ===");
// Car 클래스 형태로 ManualCar 객체생성
Car hisCar = new ManualCar();
hisCar.run();
}
}////////////////// class
💡 출력 화면
=== 자율 주행하는 자동차 ===
시동을 켭니다.
자율 주행합니다.
자동차가 알아서 방향을 전환합니다.
스스로 멈춥니다.
시동을 끕니다.
=== 사람이 운전하는 자동차 ===
시동을 켭니다.
사람이 운전합니다.
사람이 핸들을 조작합니다.
브레이크로 정지합니다.
시동을 끕니다.
💡 메서드 실행순서와 시나리오를 정희하는 것이다.
final
이라는 예약어를 사용해야한다.