[python] 톰플레이트 패턴

톰플레이트 패턴은 객체 지향 디자인 패턴 중 하나로, 알고리즘의 구조를 메소드에 정의하고 일부를 서브클래싱하여 구현하는 방법입니다. 이 패턴은 특히 동일한 알고리즘의 다양한 변형이 필요한 경우 유용하게 사용됩니다.

패턴 개요

톰플레이트 패턴은 크게 두 가지 구성요소로 이루어져 있습니다:

예제

다음은 톰플레이트 패턴의 간단한 예제입니다. 우리는 커피를 만드는 알고리즘을 만들고, 이를 커피와 티로 구체화하는 클래스를 작성할 것입니다.

from abc import ABC, abstractmethod

class HotBeverage(ABC):
    def prepare(self):
        self.boil_water()
        self.brew()
        self.pour()
        self.add_condiments()

    def boil_water(self):
        print("물 끓이는 중...")

    @abstractmethod
    def brew(self):
        pass

    def pour(self):
        print("컵에 따르는 중...")

    @abstractmethod
    def add_condiments(self):
        pass

class Coffee(HotBeverage):
    def brew(self):
        print("커피를 내리는 중...")

    def add_condiments(self):
        print("설탕과 우유를 추가하는 중...")

class Tea(HotBeverage):
    def brew(self):
        print("차를 우리는 중...")

    def add_condiments(self):
        print("레몬을 추가하는 중...")

위의 예제에서는 HotBeverage 클래스가 알고리즘의 구조를 정의하고, CoffeeTea 클래스가 구체화를 수행합니다. HotBeverage 클래스의 prepare 메소드는 알고리즘을 정의하며, 이를 구현한 brewadd_condiments 메소드가 구체 클래스에서 구현됩니다.

사용 예시

이제 톰플레이트 패턴을 사용하여 커피와 티를 만들어봅시다. 다음은 사용 방법의 예시입니다:

coffee = Coffee()
coffee.prepare()

tea = Tea()
tea.prepare()

이 코드를 실행하면 다음과 같은 결과가 출력됩니다:

물 끓이는 중...
커피를 내리는 중...
컵에 따르는 중...
설탕과 우유를 추가하는 중...
물 끓이는 중...
차를 우리는 중...
컵에 따르는 중...
레몬을 추가하는 중...

결론

톰플레이트 패턴을 사용하면 알고리즘을 구조적으로 정의하고 일부를 서브클래싱하여 다양한 변형을 구현할 수 있습니다. 이 패턴은 코드 재사용성을 높이고 유지보수를 용이하게 만들어줍니다. 따라서 비슷한 알고리즘이 다양한 상황에서 사용되어야 하는 경우에는 톰플레이트 패턴을 고려해보세요. ```