팩토리 디자인 패턴은 객체 생성 로직을 캡슐화하여 코드의 유연성과 확장성을 높이는 디자인 패턴입니다. 이를 통해 객체 생성에 관한 로직을 클라이언트 코드에서 분리하고, 객체 생성 방식을 재정의하거나 확장할 수 있는 구조를 제공합니다.
팩토리 패턴의 핵심 아이디어는 객체 생성 과정을 메소드에 위임하여, 객체를 직접 생성하지 않고 해당 메소드가 올바른 인스턴스를 반환하도록 하는 것입니다. 이는 코드 변경 없이 새로운 객체 타입을 쉽게 추가할 수 있도록 하며, 특히 클라이언트 코드가 생성되는 구체 클래스에 의존하지 않도록 하는 데에 효과적입니다.
from abc import ABC, abstractmethod
# 1. Animal 추상 클래스 정의
class Animal(ABC):
@abstractmethod
def speak(self):
pass
# 2. 구체적인 클래스 정의
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
# 3. AnimalFactory 클래스 정의
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
else:
raise ValueError(f"Unknown animal type: {animal_type}")
# 4. 클라이언트 코드에서 팩토리 메서드를 사용해 객체 생성
if __name__ == "__main__":
animal_type = "dog" # 혹은 "cat"
animal = AnimalFactory.create_animal(animal_type)
print(animal.speak()) # 출력: "Woof!" 또는 "Meow!"