[java] 메멘토 패턴

메멘토 패턴은 객체의 상태를 저장하고 복원하는 디자인 패턴 중 하나입니다. 이 패턴은 상태를 저장하는 Originator, 상태를 저장하고 복원하는 Memento, 상태를 관리하는 Caretaker로 구성됩니다. 이 패턴은 객체의 상태를 저장하고 나중에 이 상태로 복원할 수 있는 기능을 제공합니다.

구성 요소

Originator

Originator는 현재 상태를 저장하고 나중에 복원할 필요가 있는 객체를 나타냅니다. 이 객체는 Memento를 생성하여 현재 상태를 저장하고, Memento에서 상태를 복원하여 객체를 원래 상태로 되돌릴 수 있습니다.

Memento

Memento는 Originator의 상태를 저장하는 역할을 합니다. 즉, 특정 시점의 객체 상태를 캡슐화하는 역할을 합니다. Memento는 Originator 외부에서는 접근할 수 없어야 합니다.

Caretaker

Caretaker는 Memento를 관리하는 역할을 합니다. 즉, Memento를 저장하고 필요 시에 Memento를 다시 Originator에게 전달하여 상태를 복원하는 역할을 합니다.

예시

public class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

public class Caretaker {
    private List<Memento> mementoList = new ArrayList<>();

    public void add(Memento state) {
        mementoList.add(state);
    }

    public Memento get(int index) {
        return mementoList.get(index);
    }
}

위 예시는 메멘토 패턴의 구현 예시입니다. Originator는 상태를 저장하고 복원하는 기능을 제공하며, Memento는 상태를 저장하는 역할을 합니다. Caretaker는 Memento를 관리하고 필요에 따라서 Originator에게 상태를 복원하도록 합니다.

메멘토 패턴은 객체의 상태를 저장하고 복원하는데 유용한 패턴으로, 상태를 관리하는 코드를 직접 작성하는 대신 패턴을 사용하여 객체의 상태를 보다 간편하게 관리할 수 있습니다.

참고 자료