템플릿 메소드 패턴

"어떻게 실행할지는 부모가 정하고, 무엇을 할지는 자식이 정한다” 패턴, 알고리즘의 템플릿(틀)을 만듦

  • 구현할 알고리즘의 구조는 고정되어 전체 처리 흐름은 동일하지만, 세부 과정 각각은 변경되거나 확장될 수 있는 경우에 유용

  • 알고리즘 순서를 강제하고 싶을 떄 사용, (알고리즘을 캡슐화)

  • 템플릿 메소드가 들아있는 추상 클래스는 구상 메소드, 추상 메소드, 후크를 정의할 수 있음

    • 구상 메소드: 추상 클래스에서 완전히 정의된 메소드 (알고리즘에서 사용되는 공통 로직)

    • 추상 메소드: 서브 클래스에서 구현되어야하는 메소드 (알고리즘의 변하는 부분 담당)

    • 후크: 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드, (확장 포인트 제공)

  • 템플릿 메소드 패턴은 여러곳에서 자주 사용되는 패턴으로 특정 방식으로 획일화 되어있지 않음


1. 추상 클래스 정의 (템플릿 메소드 정의된)

알고리즘의 순서(템플릿 메소드) 정의 및 공통 로직을 구현 변경되는 부분은 abstract 또는 hook 메소드로 열어둠

abstract class DataParser {
  parse(): void {
    this.readData()
    
    if (this.useCache()) {
      this.loadFromCache()
    }
    
    this.processData()
    this.saveData()
  }
  
  // 구상 메소드(공통 로직)
  protected readData(): void {
    console.log('Data 읽기')
  }
  protected saveData(): void {
    console.log('Data 저장')
  }
  protected loadFromCache(): void {
    console.log('캐시에서 Data 로드')
  }
  
  // 추상 메소드(알고리즘에서 각기 다른 부분)
  protected abstract processData(): void
  
  // 후크 메소드 (선택적 오버라이드)
  protected useCache(): boolean {
    return false
  }
}

2. 하위 클래스 정의

상위 클래스가 정의한 흐름은 변경 불가 일부 단계만 구체적으로 구현

3. 클라이언트 코드

Last updated