메멘토 패턴은 객체의 상태를 저장하고 복원하는 기능을 제공하는 디자인 패턴입니다. 이 패턴은 객체의 내부 상태를 외부에서 액세스할 수 없게 유지하면서도, 상태를 저장하고 복원할 수 있게 합니다. 이는 객체의 상태를 미리 저장해두고 나중에 필요할 때 원래 상태로 복구할 수 있다는 장점을 갖고 있습니다.
메멘토 패턴의 구성 요소
메멘토 패턴은 일반적으로 세 가지 주요 구성 요소로 구성됩니다.
- Originator(원조): 객체의 현재 상태를 저장 및 복원하는 메서드를 가지고 있는 클래스입니다.
- Memento(메멘토): 객체의 상태를 저장하는 클래스입니다. 이 클래스는 원조 클래스에 대한 내부 상태를 캡슐화합니다.
- 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
메서드는 원조 객체의 상태를 메멘토 객체로부터 복원합니다.
메멘토 패턴의 활용
메멘토 패턴은 객체의 상태를 저장하고 복원해야 하는 상황에서 유용하게 활용될 수 있습니다. 예를 들어, 텍스트 편집기의 상태를 저장하고 복원하거나 게임의 진행 상황을 저장하고 되돌릴 때 메멘토 패턴을 사용할 수 있습니다.
또한, 메멘토 패턴은 “되돌리기” 기능을 구현하는데에도 사용될 수 있습니다. 사용자가 어떤 작업을 실행할 때마다 상태를 저장하고, 사용자가 작업을 되돌리길 원할 때 이전 상태로 복원하는 것이 가능합니다.
결론
메멘토 패턴은 객체의 상태를 저장하고 복원하는 기능을 제공하는 디자인 패턴입니다. 객체의 내부 상태를 외부에서 액세스할 수 없게 유지하면서도 상태를 저장하고 복원할 수 있는 기능을 제공합니다. 이를 통해 객체의 상태를 캡슐화하고, 필요에 따라 이전 상태로 복구할 수 있습니다.