메멘토 패턴은, 이전 상태로 복원할 필요가 있을 때 사용하는 패턴이다.
이전에 설명했던 [명령패턴]은 명령을 내리는 개체와 실행하는 개체를 나누어서 인터페이스화 시킨 패턴이다.
명령 패턴은 인터페이스를 상속 받아 실행하기 때문에, 명령을 추가하기에 간단하다.
메멘토 패턴은 originator, memento, caretaker로 이루어진다.
originator : save, restore가 memento 개체 타입으로 이루어진 개체
memento : originator가 save 및 restore 하려는 정보 또는 상태를 가지고 있는 패턴 개체
caretaker : memento를 리스트로 보유하여 관리하는 개체
originator 개체의 상태를 저장하기 때문에 Save & Load에 많이 쓰인다.
때문에, 메멘토 패턴은 깊은 복사(deep copy)를 구현해 줄 필요가 있다.
메멘토 패턴을 쓰는 대표적인 게임은 바둑, 장기, 체스 등 게임의 필수 조건인 무르기, 복기와 같은 시스템을 필요로 하는 게임이다.
각 각의 개체가 해당하는 역할을 주석 달아두었다.
Board 클래스는 바둑판의 정보를 가진 개체이다.
BadukBoard 클래스는 Board의 상태를 Save & Restore 할 수 있는 패턴의 주요 개체이다.
BadukBoardTaker 클래스는 BadukBoard 리스트를 두어 무르기, 복기 시스템을 사용 할 수 있는 바둑판의 전체 정보를 관리하는 개체이다.
Board(originator)를 통하여 Save 상태를 내보내고, Restore 상태를 가져올 수 있는 기능이 있어야 한다.
BadukBoard(memento)를 통하여 originator에서 저장한 개체의 상태를 가지고 있으며, 저장한 개체의 상태를 내보낼 수 있는 기능이 있어야 한다.
BadukBoardTaker(caretaker)를 통하여 memento로 저장한 개체의 모든 리스트들을 관리할 수 있는 기능이 있어야 한다.
메멘토 패턴을 사용한 간단한 규칙 없는 바둑 게임을 만들어 보았다.
'프로그래밍 끄적 > 디자인 패턴 (Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 상태 패턴 (State Pattern) (0) | 2018.09.04 |
---|---|
[디자인 패턴] 감시자 패턴 (Observer Pattern) (0) | 2018.09.03 |
[디자인 패턴] 중재자 패턴 (Mediator Pattern) (2) | 2018.08.22 |
[디자인 패턴] 반복자 패턴 (Iterator Pattern) (0) | 2018.08.15 |
[디자인 패턴] 해석자 패턴 (Interpreter Pattern) (0) | 2018.08.06 |