템플릿 메소드 패턴이란?
템플릿 메서드 패턴이란?
기능의 뼈대(템플릿)와 실제 구현을 분리하는 패턴입니다.
부모 클래스에서 알고리즘의 골격을 정의하지만 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 지원합니다.
언제 사용할 수 있을까?
예를 들어 사용자들이 다양한 형식(PDF, DOC, CSV)의 문서들을 등록하고 해당 문서에서 일관된 형식의 의미 있는 데이터를 추출하고자 합니다.
DocDataMiner, CSVDataMiner, PDFDataMiner 클래스에는 유사한 코드들이 보입니다.
굵은 글씨의 다양한 데이터 형식들을 처리(exteract, parse)하는 코드는 클래스마다 다르지만 분석을 수행하고 리포트를 만들어내는 과정을 동일합니다.
템플릿 메서드 패턴으로 해결하기
openFile, extractData, praseData, analyzeData, sendReport, closeFile에 대한 알고리즘을 일련의 단계들로 나누고 이런 단계들은 abstract method나 deafult method를 활용하여 기본 구현을 활용하거나 override를 가능하도록 합니다.
DataMiner라는 mine이라는 템플릿 메서드에서 하위구현의 단계들을 만들어두고 하위구현은 오버라이드하거나 기본구현을 활용합니다.
이로써 CSVDataMiner, PDFDataMiner 등에서는 extractData, parseData 등 필요한 구현들만 수행하면서 중복코드를 줄일 수 있습니다.
조금 더 명확하게 사용하기
템플릿 메서드 패턴은 클라이언트가 알고리즘의 특정 단계들만 확장할 수 있도록 지원합니다.
전체 알고리즘이나 알고리즘의 구조는 확장되지 못하도록 할 때 사용하면 좋습니다.
확장하는 특정 단계(exteractData, parseData)
전체 알고리즘의 구조 (openFile -> extractData -> parseData -> analyzeData -> sendReport -> closeFile)
참고자료
https://engineering.linecorp.com/ko/blog/templete-method-pattern
https://refactoring.guru/ko/design-patterns/template-method