Memento Pattern: 객체 상태의 저장과 복원을 위한 디자인 패턴
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 패턴은 객체의 상태를 저장하고 복원할 수 있는 유용한 디자인 패턴이다. 이 패턴은 객체의 상태를 외부로 노출하지 않고, 캡슐화하여 저장하고 복원하기 때문에 객체의 외부 동작에 영향을 주지 않는다. 이 패턴을 사용하면 사용자가 언제든지 이전 상태로 되돌릴 수 있는 기능을 제공할 수 있다.
Comments
Post a Comment