Justin의 개발 로그
article thumbnail

메멘토 패턴은 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 디자인 패턴이다.

메멘토 패턴은 3개의 객체로 구현된다: 오리지네이터(originator), 케어테이커(caretaker), 메멘토(memento).

 

  • 오리지네이터는 내부 상태를 보유하고 있는 일부 객체이다.
  • 케어테이커는 오리지네이터에 대해 어떤 상태 변경을 처리하지만, 변경에 대한 실행 취소(원복) 하기를 원한다. 케어테이커는 먼저 오리지네이터에게 메멘토 객체를 요청한다. 그 뒤 예정된 일련의 명령을 수행한다.
  • 이전의 상태로 되돌리기 위해 메멘토 객체에게 기존 상태를 요청해서 오리지네이터에 반환한다.

 

메멘토 패턴은 본래의 클래스(Originator)의 복잡도는 증가시키지 않으면서 객체의 저장 및 복구 기능은 구현하는 것으로 상태의 보관, 복구는 메멘토 객체에서 담당합니다.

 

 

오리지네이터(originator)

사전적 의미 : 창작자, 창설자, 창시자, 발기인, 시조

역할 : 상태를 가지고 있는 객체

케어테이커(caretaker)

사전적 의미 : 경비원, 관리인, 돌보는 사람

역할 : 상태를 관리하는 객체

메멘토(memento)

사전적 의미 :  기념품 (사람·장소를 기억하기 위한)

역할 : 상태

 

import java.util.List;
import java.util.ArrayList;
class Originator {
    private String state;
    // The class could also contain additional data that is not part of the
    // state saved in the memento..
    public void set(String state) {
        this.state = state;
        System.out.println("Originator: Setting state to " + state);
    }
    public Memento saveToMemento() {
        System.out.println("Originator: Saving to Memento.");
        return new Memento(this.state);
    }
    public void restoreFromMemento(Memento memento) {
        this.state = memento.getSavedState();
        System.out.println("Originator: State after restoring from Memento: " + state);
    }
    public static class Memento {
        private final String state;
        public Memento(String stateToSave) {
            state = stateToSave;
        }
        // accessible by outer class only
        private String getSavedState() {
            return state;
        }
    }
}
class Caretaker {
    public static void main(String[] args) {
        List<Originator.Memento> savedStates = new ArrayList<Originator.Memento>();
        Originator originator = new Originator();
        originator.set("State1");
        originator.set("State2");
        savedStates.add(originator.saveToMemento());
        originator.set("State3");
        // We can request multiple mementos, and choose which one to roll back to.
        savedStates.add(originator.saveToMemento());
        originator.set("State4");
        originator.restoreFromMemento(savedStates.get(1));
    }
}

/*
>>Terminal
Originator: Setting state to State1
Originator: Setting state to State2
Originator: Saving to Memento.
Originator: Setting state to State3
Originator: Saving to Memento.
Originator: Setting state to State4
Originator: State after restoring from Memento: State3
*/
profile

Justin의 개발 로그

@라이프노트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!