[Java] 템플릿 메서드

12818 단어 JavaJava

📕1. 템플릿 메서드

1-1. 템플릿 메서드란?

💡 템플릿이란 용어를 사전에서 찾아보면 틀이나, 견본을 의미한다
즉 , 틀이 있는 메서드라는 의미이다.

📢 템플릿 메서드는 추상클래스를 사용하여 구현할 수 있다.


📕2. 템플릿 메서드 예시

2-1. 템플릿메서드를 사용한 추상클래스 만들기

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 클래스를 상속받았기 때문에 구현되지 않은 추상 메서드를 마저 구현해야 한다.

2-2. AICar class 만들기

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 클래스 는 자율주행을 하고 방향도 알아서 바꾼다.


2-3. ManualCar class 만들기

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 클래스 는 직접 핸들을 조작하면서 달리고 정지를 하려면 브레이크를 밟으면 된다.

그러면 이제 테스트 프로그램을 만들어 이 두 자동차가 어떻게 움직이는지 확인해 보자


2-4. 테스트 프로그램 만들기

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 
💡 출력 화면

=== 자율 주행하는 자동차 ===
시동을 켭니다.
자율 주행합니다.
자동차가 알아서 방향을 전환합니다.
스스로 멈춥니다.
시동을 끕니다.
=== 사람이 운전하는 자동차 ===
시동을 켭니다.
사람이 운전합니다.
사람이 핸들을 조작합니다.
브레이크로 정지합니다.
시동을 끕니다.

2-5. 템플릿 메서드의 역할

💡 메서드 실행순서와 시나리오를 정희하는 것이다.

  • 템플릿 메서드에서 호출하는 메서드는 추상 메서드가 가능하지만
    템플릿 메서드 자체는 추상메서드가 아니기 때문에 하위 클래스에서 재정의가 불가하다.
  • 따라서 템플릿 메서드는 final 이라는 예약어를 사용해야한다.

좋은 웹페이지 즐겨찾기