[Design Pattern] 템플릿 메소드 패턴(Template Method Pattern)

in·2023년 10월 10일
0

Design Pattern

목록 보기
4/8

📌 템플릿 메소드 패턴(Template Method Pattern)

어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴

  • 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메소드의 코드 중복을 최소화할 때 유용
  • 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현해 알고리즘 코드를 재소용하는데 유용

  • AbstractClass
    - 템플릿 메소드를 정의하는 클래스
    • 하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메소드 또는 hook 메소드로 정의하는 클래스
  • ConcreteClass
    - 물려받은 primitive 메소드 또는 hook 메소드를 구현하는 클래스
    • 상위 클래스에 구현된 템플릿 메소드의 일반적인 알고리즘에서 하위 클래스에 적합하게 primitive 메소드나 hook 메소드를 오버라이드하는 클래스

조건

  • 클래스는 추상(abstract)로 만듦
  • 단계를 진행하는 메소드는 수정이 불가능하도록 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 키워드를 통해 자식 클래스에서는 선택적으로 메소드를 오버라이드 할 수 있게 된다.

📌 abstract와 Interface의 차이

  • abstract : 부모의 기능을 자식에서 확장시켜나가고 싶을 때
  • interface : 해당 클래스가 가진 함수의 기능을 활용하고 싶을 때

(abstract는 다중 상속 X)

[참고 자료]

🔗링크
🔗링크

0개의 댓글