
소프트웨어 개발
Template Method Pattern템플릿 메서드 패턴
템플릿 메서드 패턴(Template Method Pattern)은 알고리즘의 골격을 상위 클래스에서 정의하고, 세부 구현은 서브클래스에서 채우는 행동 패턴이다. 코드 중복을 줄이고 헐리우드 원칙("Don't call us, we'll call you")을 구현한다.
Python 구현
python
from abc import ABC, abstractmethod
class DataProcessor(ABC):
# 템플릿 메서드 (골격 정의)
def process(self):
data = self.read_data()
parsed = self.parse(data)
result = self.analyze(parsed)
self.save(result)
# 공통 구현
def save(self, result):
print(f"결과 저장: {result}")
# 서브클래스가 구현할 훅
@abstractmethod
def read_data(self) -> str: pass
@abstractmethod
def parse(self, data: str) -> list: pass
@abstractmethod
def analyze(self, data: list) -> dict: pass
class CSVProcessor(DataProcessor):
def read_data(self) -> str:
return "name,age
Alice,30
Bob,25"
def parse(self, data: str) -> list:
lines = data.strip().split('
')
headers = lines[0].split(',')
return [dict(zip(headers, line.split(','))) for line in lines[1:]]
def analyze(self, data: list) -> dict:
ages = [int(d['age']) for d in data]
return {"avg_age": sum(ages) / len(ages), "count": len(ages)}
class JSONProcessor(DataProcessor):
def read_data(self) -> str:
import json
return json.dumps([{"name": "Carol", "age": 28}])
def parse(self, data: str) -> list:
import json
return json.loads(data)
def analyze(self, data: list) -> dict:
return {"count": len(data)}
CSVProcessor().process()훅(Hook) 메서드
python
class ReportGenerator(ABC):
def generate(self):
self.header()
self.body()
if self.need_footer(): # 훅: 선택적 오버라이드
self.footer()
def need_footer(self) -> bool:
return True # 기본값
@abstractmethod
def header(self): pass
@abstractmethod
def body(self): pass
def footer(self):
print("--- END ---")