[디자인 패턴] Prototype 패턴

정태경·2023년 10월 14일
post-thumbnail

Prototype 패턴

프로토타입 패턴은 생성자의 복잡한 과정을 생략하고, 기존 객체를 복제하여 새로운 객체를 생성하는 패턴이다. 이를 통해 객체를 생성하는 데 드는 비용을 줄일 수 있으며, 객체 생성의 유연성을 높일 수 있다.

프로토타입 패턴에서는 기존 객체를 복제하는 데 사용할 프로토타입(Prototype) 객체를 정의하고, 이를 복제하여 새로운 객체를 생성하게 된다. 이 때, 필요에 따라 얕은 복제(Shallow Copy)나 깊은 복제(Deep Copy)를 사용할 수 있다.

파이썬에서는 객체를 복제하는 데 copy 모듈을 사용할 수 있으며 copy 모듈에서는 얕은 복제를 수행하는 copy() 함수와 깊은 복제를 수행하는 deepcopy() 함수를 제공한다.

예제 코드

import copy


class Character:
    def __init__(self, name, health, damage):
        self.name = name
        self.health = health
        self.damage = damage

    def __str__(self):
        return f"{self.name} ({self.health} HP, {self.damage} DMG)"

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


class Mage(Character):
    def __init__(self, name, health, damage, mana):
        super().__init__(name, health, damage)
        self.mana = mana

    def __str__(self):
        return f"{super().__str__()}, {self.mana} MP"


class Warrior(Character):
    def __init__(self, name, health, damage, rage):
        super().__init__(name, health, damage)
        self.rage = rage

    def __str__(self):
        return f"{super().__str__()}, {self.rage} Rage"


mage1 = Mage("Gandalf", 100, 10, 50)
print(mage1)

mage2 = mage1.clone()
print(mage2)

warrior1 = Warrior("Conan", 150, 15, 0)
print(warrior1)

warrior2 = warrior1.clone()
warrior2.name = "Grady"
print(warrior2)
profile
두나무 업비트 QA 엔지니어

0개의 댓글