[Java]テンプレートメソッド


📕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 
  • drive(), stop()抽象メソッドを使用するCarクラスが作成されました.
    3つの実装方法start(), turnOff(), run()を有する.

  • 自動車の起動とシャットダウンの方法は、どの自動車とも同様に、事前にコードを実現している.
  • drive() 와 turnOff()は、異なる車種に応じて異なる方法で移動できると主張しているため、抽象的な方法を採用している.

  • テンプレート法run()は、自動車の走行方法を順次実現している.
  • では、Carクラスを継承するために2つのクラスを実現しましょう.
    継承される等級は、自主走行のAICar 클래스と一般自動車ManualCar 클래스である.
    この2つのクラスはCar 클래스を継承するので、実装されていないすべての抽象的な方法を実装する必要があります.

    2-2. AICarクラスの作成

    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クラスの作成

    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台の車がどのように動いているかをテストしてみましょう.

    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という名前の予約語を使用する必要があります.