파이썬의 팩토리 패턴

Fariba Laiq 2023년6월21일
  1. Python에서 Factory 메서드 구현
  2. Python에서 Factory 메서드의 장점
  3. Python에서 Factory 메서드의 단점
파이썬의 팩토리 패턴

팩토리 디자인 패턴은 창작 디자인 패턴 카테고리에 속합니다. 생성 디자인 패턴은 개체 생성을 위한 많은 기술을 제공하여 더 많은 코드 재사용성과 유연성을 제공합니다.

팩토리 메소드는 구체적인 클래스를 지정하지 않고 객체를 생성하는 메소드입니다.

단일 부모 클래스(추상 클래스 또는 인터페이스)가 개체의 일반 구조를 정의하고 하위 클래스가 개체를 인스턴스화하는 완전한 구현을 제공하는 방식으로 추상화 및 다형성을 제공합니다.

Python에서 Factory 메서드 구현

다음 코드에서 abcABCMeta(추상 클래스 선언) 및 abstractstaticmethod(추상 정적 메서드 선언)를 가져온 추상 기본 클래스를 나타내는 패키지입니다.

추상 정적 메소드 person_type()을 갖는 Person이라는 일반 추상 기본 클래스를 정의했습니다.

구체적인 파생 클래스는 이 메서드를 구현합니다. 그런 다음 Person에서 StudentTeacher라는 두 개의 파생 클래스를 정의했습니다. 두 클래스 모두 필요에 따라 추상 정적 메서드 person_type()을 구현합니다.

우리는 사용자의 입력 선택에 따라 실행 시간에 사람(학생 또는 교사)의 객체를 생성하는 책임이 있는 팩토리 메서드 PersonFactory를 선언했습니다.

이 클래스에는 사람 유형을 인수로 사용하고 이름(학생 이름 또는 교사 이름)으로 필요한 객체를 구성하는 정적 메서드인 build_person()이 있습니다.

예제 코드:

# Python 3.x
from abc import ABCMeta, abstractstaticmethod


class Person(metaclass=ABCMeta):
    @abstractstaticmethod
    def person_type():
        pass


class Student(Person):
    def __init__(self, name):
        self.name = name
        print("Student Created:", name)

    def person_type(self):
        print("Student")


class Teacher(Person):
    def __init__(self, name):
        self.name = name
        print("Teacher Created:", name)

    def person_type(self):
        print("Teacher")


class PersonFactory:
    @staticmethod
    def build_person(person_type):
        if person_type == "Student":
            name = input("Enter Student's name: ")
            return Student(name)
        if person_type == "Teacher":
            name = input("Enter Teacher's name: ")
            return Teacher(name)


if __name__ == "__main__":
    choice = input("Enter the Person type to create: ")
    obj = PersonFactory.build_person(choice)
    obj.person_type()

출력:

#Python 3.x
Enter the Person type to create: Teacher
Enter Teacher's name: Jhon
Teacher Created: Jhon
Teacher

Python에서 Factory 메서드의 장점

  • 코드에서 느슨한 결합을 조장합니다.
  • 현재 코드를 방해하지 않고 약간 다른 특성을 가진 새로운 개체를 인스턴스화하기 위해 코드를 쉽게 수정할 수 있습니다.
  • 코드에서 추상화다형성을 촉진합니다.

Python에서 Factory 메서드의 단점

  • 개체가 약간 다른 기능을 가진 동일한 범주에 속하는 경우에만 사용할 수 있습니다.
  • 팩토리 디자인 패턴은 코드의 총 클래스 수를 늘립니다.
  • 추상화로 인해 구현이 숨겨지기 때문에 코드의 가독성이 감소합니다.
작가: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn