팩토리 패턴(factory method pattern): 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화(사용자로부터 프로세스 또는 메서드의 내부 구현을 숨김)한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.
factory method pattern에서의 'factory'는 '공장'이라는 뜻으로, object를 찍어낼 수 있는 공장을 의미한다. factory는 함수로 나타낼수도 있고 클래스 로 나타낼수도 있다.
class Animal():
def speak(self):
pass
class Cat(Animal):
def speak(self):
print("meow")
class Dog(Animal):
def speak(self):
print("bark")
# 함수로 나타내는 팩토리
# 실제 코드를 짤 때는 enum을 사용하자
def FactoryFn(animal:str) -> Animal:
if animal == "Cat":
return Cat()
if animal == "Dog":
return Dog()
cat = FactoryFn("Cat")
cat.speak() # meow
dog = FactoryFn("Dog")
dog.speak() # bark
# 클래스로 나타내는 팩토리
class AnimalFactory():
# enum 추천
def createAnimal(self, animal:str) -> Animal:
if animal == "Cat":
return Cat()
elif animal == "Dog":
return Dog()
factory = AnimalFactory()
cat = factory.createAnimal("Cat")
dog = factory.createAnimal("Dog")
cat.speak() # meow
dog.speak() # bark