PHpullh
학습 라이브러리/Python/템플릿 메서드

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단계가 적절합니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.