선릉역 1번 출구

8. 템플릿 메서드 패턴(template method pattern) 본문

Language/Java

8. 템플릿 메서드 패턴(template method pattern)

choideu 2023. 11. 23. 14:24

라이브러리 vs 프레임워크

  • 라이브러리: JDK, 내가 흐름을 다 정하는 것임
  • 프레임워크: 안드로이드, 흐름이 다 정해져있고 내가 하는 일은 구멍을 메우는 것임

템플릿 메서드

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

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

  • 중요한 흐름을 정의하고 있기 때문
  • 단, 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함

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

 

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();
    }// 재정의하지 못하게 final로 선언
}

class ManualCar extends Car{
    @Override
    public void drive(){
        System.out.println("사람이 운전합니다.");
        System.out.println("사람이 핸들을 조작합니다.");
    }
    
    @Override
    public void stop(){
        System.out.println("브레이크를 밟아서 정지합니다.");
    }
}

class AICar extends Car{
    @Override
    public void drive(){
        System.out.println("AI가 운전합니다.");
        System.out.println("AI가 핸들을 조작합니다.");
    }
    @Override
    public void stop(){
        System.out.println("스스로 정지합니다.");
    }
}

public class Test{
    public static void main (String[] args) {
        
        Car hCar = new ManualCar();
        Car aCar = new AICar();
        
        hCar.run();
        aCar.run();
    }
}

 

'Language > Java' 카테고리의 다른 글

9. 인터페이스  (1) 2023.11.23
7. 추상 클래스  (0) 2023.11.23
6. 자바의 특징  (0) 2023.11.23
5. 배열의 정규화  (0) 2023.11.21
4. 얕은 복사 vs 깊은 복사  (2) 2023.11.21
Comments