[python] 메멘토 패턴
메멘토 패턴은 객체의 상태를 저장하고 복원하는 데 사용되는 패턴입니다. 이 패턴은 객체의 상태를 캡슐화하여, 상태를 중간 저장소에 저장하고 필요할 때 다시 복원할 수 있게 합니다.
메멘토 패턴은 주로 상태를 복원하기 위해 undo
또는 rollback
기능이 필요한 경우에 사용됩니다. 예를 들어, 텍스트 편집기에서 Undo
를 누르면 이전 상태로 돌아갈 수 있습니다.
구성 요소
메멘토 패턴은 보통 세 가지 구성 요소로 이루어집니다:
- Originator (원조자): 상태를 저장하고 복원하는 역할을 담당합니다.
- Memento (메멘토): 원조자의 내부 상태를 담는 객체입니다.
- Caretaker (관리자): 메멘토를 보관하고 관리하는 역할을 담당합니다.
예제
다음은 Python에서 메멘토 패턴을 구현하는 간단한 예제입니다.
class Originator:
def __init__(self):
self.state = None
def set_state(self, state):
self.state = state
def create_memento(self):
return Memento(self.state)
def restore_memento(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 add_memento(self, memento):
self.mementos.append(memento)
def get_memento(self, index):
return self.mementos[index]
위의 예제에서 Originator
는 상태를 저장하고 복원하는 원조자 역할을 합니다. Memento
는 원조자의 상태를 담는 객체입니다. Caretaker
는 메멘토를 보관하고 관리하는 역할을 합니다.
실제 사용 예시는 다음과 같습니다:
originator = Originator()
caretaker = Caretaker()
originator.set_state("상태 1")
caretaker.add_memento(originator.create_memento())
originator.set_state("상태 2")
caretaker.add_memento(originator.create_memento())
originator.set_state("상태 3")
print("현재 상태:", originator.state) # 현재 상태: 상태 3
originator.restore_memento(caretaker.get_memento(1))
print("복원된 상태:", originator.state) # 복원된 상태: 상태 2
위의 예제에서 Originator
는 상태를 설정하고, Memento
로 상태를 저장하고 복원합니다. Caretaker
는 Memento
를 관리하고 추적합니다. 상태를 복원할 때 Caretaker
를 통해 원하는 메멘토를 가져와서 복원합니다.
요약
메멘토 패턴은 객체의 상태를 저장하고 복원하기 위한 패턴입니다. Originator
, Memento
, Caretaker
로 구성되며, 원조자가 상태를 저장하고 복원하고, 메멘토는 상태를 담는 객체이고, 관리자는 메멘토를 관리합니다. 이 패턴은 주로 상태를 복원해야하는 상황에서 사용됩니다.