템플릿 메소드 패턴
"어떻게 실행할지는 부모가 정하고, 무엇을 할지는 자식이 정한다” 패턴, 알고리즘의 템플릿(틀)을 만듦
구현할 알고리즘의 구조는 고정되어 전체 처리 흐름은 동일하지만, 세부 과정 각각은 변경되거나 확장될 수 있는 경우에 유용
알고리즘 순서를 강제하고 싶을 떄 사용, (알고리즘을 캡슐화)
템플릿 메소드가 들아있는 추상 클래스는
구상 메소드,추상 메소드,후크를 정의할 수 있음구상 메소드: 추상 클래스에서 완전히 정의된 메소드 (알고리즘에서 사용되는 공통 로직)
추상 메소드: 서브 클래스에서 구현되어야하는 메소드 (알고리즘의 변하는 부분 담당)
후크: 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드, (확장 포인트 제공)
템플릿 메소드 패턴은 여러곳에서 자주 사용되는 패턴으로 특정 방식으로 획일화 되어있지 않음
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