Memento 패턴은 객체 상태의 저장과 복원을 위한 디자인 패턴이다. 객체의 현재 상태가 저장되어야 하고, 이후에 객체 상태를 변경하면 이전 상태로 복원할 수 있어야 한다. 이런 상황에서 Memento 패턴은 객체의 상태를 캡슐화하여 저장하고, 이를 복원하기 위한 인터페이스를 제공한다.

Memento 패턴이란?

Memento 패턴은 객체의 상태를 저장하고, 나중에 복원할 수 있도록 하는 디자인 패턴이다. 이 패턴은 객체의 상태를 외부로 노출하지 않고, 캡슐화하여 저장하고 복원하기 때문에 객체의 외부 동작에 영향을 주지 않는다.

예를 들어, 사용자가 텍스트 편집기에서 텍스트를 편집하는 도중에 언제든지 이전 상태로 되돌릴 수 있는 기능이 필요하다고 가정해보자. 이런 경우 Memento 패턴을 사용하면 현재 텍스트의 상태를 캡슐화하여 저장하고, 이전 상태로 되돌리는 인터페이스를 제공할 수 있다.

Memento 패턴의 사용 예시 및 구현 방법

Memento 패턴은 일반적으로 다음과 같은 상황에서 사용된다.

  • 객체의 상태를 저장하고 복원해야 하는 경우
  • 객체의 상태를 외부로 노출하지 않고 캡슐화하고 싶은 경우

Memento 패턴을 구현하기 위해서는 다음과 같은 클래스가 필요하다.

  • Originator: 상태를 저장하고 복원할 객체
  • Memento: 상태를 저장하는 객체
  • Caretaker: Memento를 보관하고 관리하는 객체
// Originator 클래스 예시
public class TextEditor {
  private String text;

  public void setText(String text) {
    this.text = text;
  }

  public String getText() {
    return text;
  }

  public Memento save() {
    return new Memento(text);
  }

  public void restore(Memento memento) {
    text = memento.getText();
  }
}

// Memento 클래스 예시
public class Memento {
  private final String text;

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

  public String getText() {
    return text;
  }
}

// Caretaker 클래스 예시
public class History {
  private final List mementos = new ArrayList();

  public void add(Memento memento) {
    mementos.add(memento);
  }

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

위의 예시에서는 TextEditor가 Originator 역할을 하고, Memento 클래스는 TextEditor의 상태를 저장하고, History 클래스가 Caretaker 역할을 한다. 사용자는 TextEditor에서 텍스트를 편집하면서, History 클래스에 Memento 객체를 저장하고, 필요할 때 이전 상태로 복원할 수 있다.

Memento 패턴은 객체의 상태를 저장하고 복원할 수 있는 유용한 디자인 패턴이다. 이 패턴은 객체의 상태를 외부로 노출하지 않고, 캡슐화하여 저장하고 복원하기 때문에 객체의 외부 동작에 영향을 주지 않는다. 이 패턴을 사용하면 사용자가 언제든지 이전 상태로 되돌릴 수 있는 기능을 제공할 수 있다.

Reference : Memento Pattern: 객체 상태의 저장과 복원을 위한 디자인 패턴

+ Recent posts