[파이썬] 메멘토 패턴과 객체 상태 저장

메멘토 패턴은 객체의 상태를 저장하고 복원하는 기능을 제공하는 디자인 패턴입니다. 이 패턴은 객체의 내부 상태를 외부에서 액세스할 수 없게 유지하면서도, 상태를 저장하고 복원할 수 있게 합니다. 이는 객체의 상태를 미리 저장해두고 나중에 필요할 때 원래 상태로 복구할 수 있다는 장점을 갖고 있습니다.

메멘토 패턴의 구성 요소

메멘토 패턴은 일반적으로 세 가지 주요 구성 요소로 구성됩니다.

  1. Originator(원조): 객체의 현재 상태를 저장 및 복원하는 메서드를 가지고 있는 클래스입니다.
  2. Memento(메멘토): 객체의 상태를 저장하는 클래스입니다. 이 클래스는 원조 클래스에 대한 내부 상태를 캡슐화합니다.
  3. Caretaker(관리자): 메멘토 객체를 관리하고 필요에 따라 원조 객체와 상호 작용하여 상태를 저장하고 복원합니다.

메멘토 패턴 예제

다음은 Python을 사용하여 메멘토 패턴을 구현하는 간단한 예제입니다.

class Originator:
    def __init__(self):
        self.state = None

    def set_state(self, state):
        self.state = state

    def save_state_to_memento(self):
        return Memento(self.state)

    def restore_state_from_memento(self, memento):
        self.state = memento.get_saved_state()


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

    def get_saved_state(self):
        return self.state


class Caretaker:
    def __init__(self):
        self.memento = None

    def save_state(self, originator):
        self.memento = originator.save_state_to_memento()

    def restore_state(self, originator):
        originator.restore_state_from_memento(self.memento)

위의 예제에서, Originator 클래스는 상태를 저장하고 복원하는 역할을 합니다. set_state 메서드를 사용하여 현재 상태를 설정하고, save_state_to_memento 메서드를 사용하여 현재 상태를 메멘토 객체로 저장합니다. restore_state_from_memento 메서드는 메멘토 객체에서 저장된 상태를 복원합니다.

Memento 클래스는 원조 객체의 상태를 저장하기 위한 클래스입니다. get_saved_state 메서드는 저장된 상태를 반환합니다.

Caretaker 클래스는 메멘토 객체를 관리하고 상태를 저장하거나 복원하는 역할을 합니다. save_state 메서드는 현재 상태를 메멘토 객체에 저장하고, restore_state 메서드는 원조 객체의 상태를 메멘토 객체로부터 복원합니다.

메멘토 패턴의 활용

메멘토 패턴은 객체의 상태를 저장하고 복원해야 하는 상황에서 유용하게 활용될 수 있습니다. 예를 들어, 텍스트 편집기의 상태를 저장하고 복원하거나 게임의 진행 상황을 저장하고 되돌릴 때 메멘토 패턴을 사용할 수 있습니다.

또한, 메멘토 패턴은 “되돌리기” 기능을 구현하는데에도 사용될 수 있습니다. 사용자가 어떤 작업을 실행할 때마다 상태를 저장하고, 사용자가 작업을 되돌리길 원할 때 이전 상태로 복원하는 것이 가능합니다.

결론

메멘토 패턴은 객체의 상태를 저장하고 복원하는 기능을 제공하는 디자인 패턴입니다. 객체의 내부 상태를 외부에서 액세스할 수 없게 유지하면서도 상태를 저장하고 복원할 수 있는 기능을 제공합니다. 이를 통해 객체의 상태를 캡슐화하고, 필요에 따라 이전 상태로 복구할 수 있습니다.