템플릿 메서드 패턴 - 추상클래스 응용

이승준·2021년 7월 25일
0

Java Study

목록 보기
10/12

템플릿 메서드


  • 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
  • final로 선언하여 하위 클래스에서 재정의 할 수 없게 함.
  • 프레임워크에서 많이 사용되는 설계 패턴
  • 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의 하고 하위 클래스에서 다르게 구현되어야 하는 부분을 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함.

Car.java

public abstract class Car {
	public abstract void drive();
	public abstract void stop();
	public void startCar() {
		System.out.println("시동을 켭니다.");
	}
	public void turnOff() {
		System.out.println("시동을 끕니다.");
	}
        public void washCar() {}
        /*템플릿 메서드*/
	final public void run() {
		startCar();
		drive();
		stop();
		turnOff();
                washCar();
	}
}
  • Hook메서드
    - 추상 클래스에서 어느 정도 구현하거나 내용이 비어있는 메서드
    - 모든 메서드를 추상 메서드로 선언하지 않아 서브클래스 구현시 융통성을 발휘하기 위한 메서드.
    - 위 예제에서 startCar, turnOff 해당하는 메서드.

ManualCar.java

public class ManualCar extends Car{ 
    @Override 
    public void drive() { 
        System.out.println("수동 주행을 합니다."); 
    } 
    @Override 
    public void stop() { 
        System.out.println("수동 주행을 멈춥니다."); 
    } 
}

AICar.java

package ch3.c10; 
public class AICar extends Car { 
    @Override 
    public void drive() { 
        System.out.println("자율 주행을 합니다."); 
        System.out.println("자동차가 방향을 바꿉니다."); 
    } 
    @Override 
    public void stop() { 
        System.out.println("자율 주행을 멈춥니다."); 
    } 
    @Override 
    public void washCar() { 
        System.out.println("차를 세척합니다"); 
    } 
}

TestCar.java

package ch3.c10; 
public class TestCar { 
    public static void main(String[] args) { 
        Car aiCar = new AICar(); 
        Car mCar = new ManualCar(); 
        mCar.run(); 
        System.out.println("-------------"); 
        aiCar.run();
      
    } 
}

final 예약어

  • final 변수 :  값이 변경될 수 없는 상수
    - public static final double PI = 3.14;
  • final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드
  • final 클래스 : 상속할 수 없는 클래스
profile
끊임없이 생각하는 주니어 웹 개발자입니다.

0개의 댓글