PYTHON · 디자인패턴
템플릿 메서드
템플릿 메서드 패턴으로 알고리즘의 골격을 정의하고 세부 단계를 서브클래스에서 구현합니다.
디자인패턴고급template method템플릿GoF알고리즘
핵심 설명
템플릿 메서드 패턴으로 알고리즘의 골격을 정의하고 세부 단계를 서브클래스에서 구현합니다.
Python code
from abc import ABC, abstractmethod
class DataProcessor(ABC):
"""알고리즘 골격 정의"""
def process(self, data: str) -> str:
parsed = self.parse(data)
validated = self.validate(parsed)
transformed = self.transform(validated)
return self.format_output(transformed)
@abstractmethod
def parse(self, raw: str) -> list: ...
@abstractmethod
def validate(self, data: list) -> list: ...
def transform(self, data: list) -> list:
"""기본 구현 (오버라이드 가능)"""
return data
@abstractmethod
def format_output(self, data: list) -> str: ...
class CSVProcessor(DataProcessor):
def parse(self, raw: str) -> list:
return [line.split(",") for line in raw.strip().split("\n")]
def validate(self, data: list) -> list:
return [row for row in data if len(row) >= 2]
def transform(self, data: list) -> list:
return [[col.strip().upper() for col in row] for row in data]
def format_output(self, data: list) -> str:
return "\n".join(" | ".join(row) for row in data)
class JSONProcessor(DataProcessor):
def parse(self, raw: str) -> list:
import json
return json.loads(raw)
def validate(self, data: list) -> list:
return [d for d in data if "name" in d]
def format_output(self, data: list) -> str:
return ", ".join(d.get("name", "?") for d in data)
csv_proc = CSVProcessor()
print(csv_proc.process("Alice, 30\nBob, 25\n, "))
json_proc = JSONProcessor()
print(json_proc.process('[{"name":"Alice"},{"age":30},{"name":"Bob"}]'))학습 팁
추상 메서드(필수 구현)와 일반 메서드(선택적 오버라이드)를 혼합하면 유연한 확장이 가능합니다.
주의할 점
템플릿 메서드의 단계가 너무 많으면 서브클래스 구현이 복잡해집니다. 3-5단계가 적절합니다.
자주 묻는 질문
템플릿 메서드란 무엇인가요?
템플릿 메서드 패턴으로 알고리즘의 골격을 정의하고 세부 단계를 서브클래스에서 구현합니다.
템플릿 메서드 학습 시 주의할 점은 무엇인가요?
템플릿 메서드의 단계가 너무 많으면 서브클래스 구현이 복잡해집니다. 3-5단계가 적절합니다.