객체지향

[객체지향] 디자인 패턴(2) - 템플릿 메서드 패턴

재담 2022. 5. 1. 00:09

템플릿 메서드 패턴

템플릿 메서드 패턴로직을 단계 별로 나눠야 하는 상황에서 사용된다. 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있는 경우 더 효율적인 패턴이다.

 

템플릿 메서드 패턴을 적용시키는 데에는 다음과 같은 조건들이 있다.

  • 클래스는 추상 클래스로 만든다.
  • 단계를 진행하는 메서드는 수정이 불가능하도록 final 키워드를 추가한다.
  • 각 단계들은 자식 클래스만 활용할 수 있도록 protected로 선언한다.

 

예를 들어 피자를 만들 때는 크게 반죽 -> 토핑 -> 굽기로 이루어져 있다. 이 단계는 항상 유지되며, 일반적으로 순서가 바뀔 일은 없다. 그러면 피자 종류에 따라 토핑만 바꾸면 된다.

abstract class Pizza {
    
    protected void 반죽() { System.out.println("반죽!"); }
    abstract void 토핑() {}
    protected void 굽기() { System.out.println("굽기!"); }
    
    final void makePizza() { // 상속 받은 클래스에서 수정 불가
        this.반죽();
        this.토핑();
        this.굽기();
    }
    
}
class PotatoPizza extends Pizza {
    
    @Override
    void 토핑() {
        System.out.println("고구마 넣기!");
    }
    
}

class TomatoPizza extends Pizza {
    
    @Override
    void 토핑() {
        System.out.println("토마토 넣기!");
    }
    
}

abstract 키워드를 통해 자식 클래스에서는 선택적으로 메서드를 오버라이드 할 수 있게 된다.


Reference