[파이썬] 프로토타입 패턴과 객체 복제

프로토타입 패턴은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나입니다. 이 패턴은 객체의 생성에 비용이 많이 드는 경우에 유용하게 사용될 수 있습니다. Python에서는 객체 복제를 통해 프로토타입 패턴을 구현할 수 있습니다.

객체 복제란?

객체 복제는 이미 존재하는 객체를 복제하여 동일한 속성과 메서드를 갖는 새로운 객체를 생성하는 것을 말합니다. 복제된 객체는 원래 객체를 기반으로 생성되므로, 원래의 객체에 영향을 미치지 않습니다.

프로토타입 패턴 구현하기

Python에서 프로토타입 패턴을 구현하려면 객체 복제를 사용해야 합니다. 객체 복제는 copy 모듈을 사용하여 구현할 수 있습니다. copy 모듈은 얕은 복사와 깊은 복사를 제공하여 복제를 수행할 수 있습니다.

얕은 복사

얕은 복사는 객체의 주소만 복사하여 원래 객체와 동일한 참조를 가지는 새로운 객체를 생성합니다. 이 경우, 객체의 내부의 객체는 동일한 객체를 참조하게 됩니다.

import copy

class Prototype:
    def __init__(self):
        self.name = "Prototype"

    def clone(self):
        return copy.copy(self)

# Prototype 객체 생성
original = Prototype()

# 얕은 복사를 통해 객체 복제
clone = original.clone()

# 복제된 객체 출력
print(clone.name)  # Output: Prototype

깊은 복사

깊은 복사는 모든 객체를 복제하여 완전히 독립적인 새로운 객체를 생성합니다. 이 경우, 객체의 내부의 객체도 모두 복제됩니다.

import copy

class Prototype:
    def __init__(self):
        self.name = "Prototype"
        self.data = [1, 2, 3]

    def clone(self):
        return copy.deepcopy(self)

# Prototype 객체 생성
original = Prototype()

# 깊은 복사를 통해 객체 복제
clone = original.clone()

# 복제된 객체 출력
print(clone.name)  # Output: Prototype
print(clone.data)  # Output: [1, 2, 3]

프로토타입 패턴의 활용

프로토타입 패턴은 객체 생성 비용이 큰 경우 혹은 유사한 객체를 여러 개 생성해야 할 때 유용합니다. 예를 들어, 데이터베이스에서 데이터를 가져와서 객체로 생성하는 경우, 매번 데이터베이스에 접근하여 객체를 생성하는 것은 비효율적일 수 있습니다. 이런 경우, 첫 번째 객체를 프로토타입으로 사용하여 나머지 객체를 복제하여 생성할 수 있습니다.

결론

프로토타입 패턴은 객체 복제를 통해 객체를 생성하는 디자인 패턴입니다. Python에서는 copy 모듈을 사용하여 객체 복제를 할 수 있습니다. 프로토타입 패턴은 객체 생성 비용이 크거나 유사한 객체를 여러 개 생성해야 할 때 유용하게 사용될 수 있습니다.