[python] 메멘토 디자인 패턴

메멘토 디자인 패턴은 객체의 상태를 저장하고 복원하는 기능을 제공합니다. 이러한 패턴은 객체의 상태를 추적하고 필요할 때 이전 상태로 되돌릴 수 있는 유연성을 제공합니다.

언제 사용해야 할까요?

메멘토 디자인 패턴은 다음 상황에서 유용합니다:

예시

class Originator:
    def __init__(self):
        self.state = ""
    
    def set_state(self, state):
        self.state = state
    
    def save_state(self):
        return Memento(self.state)
    
    def restore_state(self, memento):
        self.state = memento.get_state()


class Memento:
    def __init__(self, state):
        self.state = state
    
    def get_state(self):
        return self.state


class Caretaker:
    def __init__(self):
        self.mementos = []
    
    def save_memento(self, memento):
        self.mementos.append(memento)
    
    def restore_memento(self, index):
        return self.mementos[index]


# 사용 예시
originator = Originator()
caretaker = Caretaker()

originator.set_state("상태1")
caretaker.save_memento(originator.save_state())

originator.set_state("상태2")
caretaker.save_memento(originator.save_state())

originator.set_state("상태3")

originator.restore_state(caretaker.restore_memento(0))
print(originator.state)  # 출력: 상태1

originator.restore_state(caretaker.restore_memento(1))
print(originator.state)  # 출력: 상태2

위 예시 코드는 메멘토 패턴의 간단한 구현을 보여줍니다. Originator 클래스는 상태를 저장하고 복원하기 위한 메서드를 제공하며, Memento 클래스는 상태를 저장하는 역할을 합니다. Caretaker 클래스는 Memento 객체를 관리하고, 필요한 시점에 복원할 수 있습니다.

요약

메멘토 디자인 패턴은 객체의 상태를 저장하고 복원하기 위한 유용한 패턴입니다. 이를 통해 객체의 상태를 추적하고 필요한 경우 이전 상태로 되돌릴 수 있습니다. 이를 통해 애플리케이션의 유연성과 확장성을 높일 수 있습니다.

참고 자료