[디자인 패턴] Memento Pattern

2019. 2. 12. 21:01카테고리 없음

Memento Pattern 


Memento Pattern은 인스턴스의 상태를 되돌리고 싶을 때 그 전의 인스턴스를 저장하고 있어야한다. 하지만 과거의 상태로 되돌리려면 클래스에 마음대로 접근할 수 있어야합니다. 그런데 잘못된 접근을 하게 된다면 의존 되어있는 코드가 여기저기 흩어지게 됩니다. 이러한 상태를 캡슐화의 파괴라고합니다. 


캡슐화의 파괴를 일으키지 않고 상태(이전의 인스턴스)를 저장하게 해주는 패턴을 Memento Pattern이라고 합니다.


- 상태를 저장하여 필요할때 마다 바꿔주고 다시 저장한다.


예시 프로그램으로 텍스터나 ide 등에서 ctrl + z 나 command + z를 통해 과거의 상태로 돌아갈 수 있게 해줍니다. 이러한 상황에서도 보통 Memento Pattern을 사용하게 됩니다. 


각종 역활

Originator (작성자)

게임 진행자의 역활을 수행하며 Memento를 만들거나 되돌리는 처리를 실행합니다. 


Memento 

사용자의 정보를 저장합니다. 하지만 정보를 공개하진 않습니다. 


Caretaker(관리인)

Caretaker 역활은 현재의 Originator의 정보를 저장하거나 restore할 때 사용한다. Caretaker는 Memento가 어떤 구조로 이루어져있는지 알 수 없다. 얕은 연결로 이루어 져있다.