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: 객체 상태의 저장과 복원을 위한 디자인 패턴
'개발' 카테고리의 다른 글
Template Method Pattern: 공통된 알고리즘을 추상화하고 구체화하여 코드 재사용성 높이기 (0) | 2023.04.06 |
---|---|
State Pattern: 객체의 상태를 캡슐화하고 상태 전환을 관리하기 위한 디자인 패턴 (0) | 2023.04.06 |
Mediator Pattern: 객체 간의 상호작용을 중개하고 관리하기 위한 디자인 패턴 (0) | 2023.04.06 |
Iterator Pattern: 컬렉션 요소에 접근하는 방식을 일관성 있게 관리하기 (0) | 2023.04.06 |
Interpreter Pattern: 언어나 문법을 해석하고 실행하기 위한 디자인 패턴 (0) | 2023.04.06 |