팩토리 메서드 패턴(Factory Method Pattern)은 객체 생성에 관한 디자인 패턴 중 하나입니다. 이 패턴은 객체 생성을 서브 클래스에게 위임하여 유연하게 객체를 생성하는 것을 목적으로 합니다.
1. 설명
어떤 클래스에서 객체를 생성해야 할 때, 그 클래스가 직접 객체를 생성하는 것이 아니라, 객체 생성을 위한 팩토리 메서드를 제공하여, 서브 클래스에서 해당 메서드를 오버라이드하고 적절한 객체를 생성할 수 있도록 합니다. 이를 통해 클래스의 인스턴스 생성 로직을 별도의 클래스로 분리하고 유연성을 확보할 수 있습니다.
2. 예제코드
Python 코드 예제를 통해 팩토리 메서드 패턴을 이해해보도록 하겠습니다.
예를 들어, 간단한 계산기를 만들어 본다고 가정해봅시다. 계산기에는 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산이 있을 수 있습니다. 이 때, 각 연산을 처리하는 클래스를 만들고, 팩토리 메서드를 이용하여 객체를 생성하도록 하겠습니다.
# 계산기 연산 처리 클래스
class Operation:
def operate(self, x, y):
pass
# 덧셈 연산 클래스
class AddOperation(Operation):
def operate(self, x, y):
return x + y
# 뺄셈 연산 클래스
class SubtractOperation(Operation):
def operate(self, x, y):
return x - y
# 곱셈 연산 클래스
class MultiplyOperation(Operation):
def operate(self, x, y):
return x * y
# 나눗셈 연산 클래스
class DivideOperation(Operation):
def operate(self, x, y):
return x / y
# 팩토리 메서드
class OperationFactory:
@staticmethod
def create_operation(operator):
if operator == '+':
return AddOperation()
elif operator == '-':
return SubtractOperation()
elif operator == '*':
return MultiplyOperation()
elif operator == '/':
return DivideOperation()
else:
raise ValueError('Invalid operator')
# 사용 예시
if __name__ == '__main__':
x = 10
y = 5
# 덧셈 연산 객체 생성 및 처리
add_operation = OperationFactory.create_operation('+')
result = add_operation.operate(x, y)
print(f'{x} + {y} = {result}')
# 나눗셈 연산 객체 생성 및 처리
divide_operation = OperationFactory.create_operation('/')
result = divide_operation.operate(x, y)
print(f'{x} / {y} = {result}')
위 예제에서는 Operation 클래스를 상속하여 각 연산을 처리하는 클래스를 만들었습니다. 그리고 OperationFactory 클래스를 만들어, create_operation 메서드를 통해 연산 객체를 생성합니다. 이 때, 생성될 객체는 인자로 전달되는 연산자에 따라 팩토리 메서드가 호출되어 적절한 객체가 생성됩니다. 이렇게 생성된 객체를 이용하여 계산을 수행하게 됩니다.
위 예제에서는 Operation 클래스를 상속하는 클래스를 만들어 각 연산을 처리했지만, 필요에 따라 Operation 클래스를 추상 클래스로 만들어서 추상 메서드를 정의할 수도 있습니다. 이 경우, 각 연산 처리 클래스는 추상 메서드를 오버라이드하여 자신의 연산 로직을 구현하면 됩니다.
3. 장점과 단점
1) 장점
객체 생성을 서브 클래스에게 위임하여, 클래스의 유연성과 확장성을 높일 수 있습니다. 즉, 새로운 객체를 추가하거나 기존 객체를 변경해도 클래스 구조를 변경하지 않고, 팩토리 메서드만 변경하면 됩니다.
객체 생성 과정을 캡슐화하여, 객체 생성 코드의 중복을 방지하고, 유지보수성을 높일 수 있습니다.
객체 생성 과정이 복잡하거나 다양한 조건에 따라 객체를 생성해야 할 때, 팩토리 메서드 패턴을 사용하면 객체 생성 과정을 캡슐화할 수 있습니다.
2) 단점
팩토리 메서드 패턴을 사용하면 클래스의 개수가 증가하게 되어, 클래스 구조가 복잡해질 수 있습니다.
객체 생성을 위해 별도의 클래스를 만들어야 하기 때문에, 객체 생성 코드가 복잡하지 않거나, 객체 생성이 자주 일어나지 않는 경우에는 불필요한 코드를 추가하게 됩니다.
'설계' 카테고리의 다른 글
[디자인 패턴] 어댑터 패턴 (Adapter Pattern) - python 예제 코드 (0) | 2023.03.07 |
---|---|
[디자인 패턴] 싱글턴 패턴 (Singleton Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 프로토타입 패턴 (Prototype Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 빌더 패턴 (Builder Pattern) - python 예제 코드 (0) | 2023.03.06 |
[디자인 패턴] 추상 팩토리 패턴 (Abstract Factory Pattern) - python 예제 코드 (0) | 2023.03.06 |