[python] 팩토리 메서드 디자인 패턴

팩토리 메서드는 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체를 생성하는 코드를 클라이언트로부터 분리할 수 있으며, 객체 생성에 대한 유연성을 제공합니다.

팩토리 메서드 디자인 패턴의 구조

팩토리 메서드 디자인 패턴은 다음과 같은 구조로 이루어져 있습니다.

Factory Method Design Pattern Structure

팩토리 메서드 디자인 패턴의 예시

다음은 Python에서 팩토리 메서드 디자인 패턴을 사용하는 예시 코드입니다.

from abc import ABC, abstractmethod

class PaymentMethod(ABC):
    @abstractmethod
    def pay(self, amount):
        pass

class CreditCardPayment(PaymentMethod):
    def pay(self, amount):
        print(f"Paying ${amount} with credit card")

class PayPalPayment(PaymentMethod):
    def pay(self, amount):
        print(f"Paying ${amount} with PayPal")

class PaymentFactory:
    def create_payment(self, method):
        if method == "creditcard":
            return CreditCardPayment()
        elif method == "paypal":
            return PayPalPayment()
        else:
            raise ValueError("Invalid payment method")

# 클라이언트 코드
payment_factory = PaymentFactory()
credit_card_payment = payment_factory.create_payment("creditcard")
credit_card_payment.pay(100)

paypal_payment = payment_factory.create_payment("paypal")
paypal_payment.pay(50)

위 코드에서 PaymentMethod는 Creator에 해당하며, CreditCardPaymentPayPalPayment는 Concrete Creator입니다. PaymentFactory는 실제로 객체를 생성하는 Factory 메서드를 구현한 클래스입니다. create_payment 메서드는 입력된 값을 기반으로 적절한 PaymentMethod 객체를 생성하여 반환합니다.

클라이언트 코드에서는 PaymentFactory를 사용해 원하는 결제 방법에 맞는 객체를 생성하고, pay 메서드를 호출하여 결제를 진행할 수 있습니다.

팩토리 메서드 디자인 패턴의 장점

결론

팩토리 메서드 디자인 패턴을 사용하면 객체 생성에 대한 유연성과 재사용성을 높일 수 있으며, 코드의 가독성과 유지 보수성도 개선됩니다. 따라서 객체 생성이 중요한 부분이라면 팩토리 메서드 디자인 패턴을 적용해보는 것이 좋습니다.

참고 문서