Memento
Memento ํจํด์ ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ์ ์ฅ(์ค๋ ์ท)ํด๋์๋ค๊ฐ, ํ์ํ ๋ ํด๋น ์ํ๋ฅผ ๋ณต์ํ ์ ์๋๋ก ํ๋ ํจํด์ ๋๋ค. ์ฆ, ๊ฐ์ฒด์ ์ํ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์๊ณ ์บก์ํํ์ฌ ๋ณด์กดํ๊ณ , ๋์ค์ ์๋ ์ํ๋ก ๋ณต์ํ ์ ์๊ฒ ํ๋ ์ญํ ์ ํฉ๋๋ค.
plaintext๋ณต์ฌ +---------------+ ์ ์ฅ/๋ณต์ +---------------+
| Originator | -------------------> | Memento |
| (์ํ ๊ด๋ฆฌ ๊ฐ์ฒด)| <------------------- | (์ํ ์บก์ํ) |
+---------------+ +---------------+
โ โฒ
โ โ
โ โ
โผ โ
+---------------+ โ
| Caretaker | ------------------------------โ
| (๋ณด๊ด์ ์ญํ ) |
+---------------+
Originator: ์์ ์ ์ํ๋ฅผ ์์ฑ, ์ ์ฅ, ๋ณต์ํ ์ฑ ์์ด ์๋ ๊ฐ์ฒด์ ๋๋ค.
Memento: Originator์ ๋ด๋ถ ์ํ๋ฅผ ์บก์ํํ ๊ฐ์ฒด๋ก, ์ธ๋ถ์๋ ์ํ์ ๋ํ ์ธ๋ถ ๋ด์ฉ์ด ๊ณต๊ฐ๋์ง ์์ต๋๋ค.
Caretaker: Memento ๊ฐ์ฒด๋ฅผ ๋ณด๊ดํ๋ฉฐ, ํ์ํ ๋ Originator์๊ฒ ์ ๋ฌํ์ฌ ์ํ ๋ณต์์ ์์ฒญํ๋ ์ญํ ์ ํฉ๋๋ค.
How do code?
// Memento: Originator์ ์ํ๋ฅผ ์บก์ํ (๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ข์)
public class Memento {
private final String state;
public Memento(String state) {
this.state = state;
}
// ์ํ ์ ๋ณด๋ ๋ด๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๊ณ ์ธ๋ถ์ ๊ณต๊ฐ๋์ง ์์
protected String getState() {
return state;
}
}
// Originator: ์์ ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ์ญํ
public class Originator {
private String state;
public void setState(String state) {
this.state = state;
System.out.println("Originator ์ํ ๋ณ๊ฒฝ: " + state);
}
public String getState() {
return state;
}
// ํ์ฌ ์ํ๋ฅผ Memento์ ์ ์ฅํ์ฌ ๋ฐํ
public Memento saveStateToMemento() {
return new Memento(state);
}
// Memento๋ฅผ ์ด์ฉํด ์ํ ๋ณต์
public void getStateFromMemento(Memento memento) {
this.state = memento.getState();
System.out.println("Originator ์ํ ๋ณต์: " + state);
}
}
// Caretaker: Memento๋ฅผ ๋ณด๊ดํ๋ ์ญํ
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์๊ฒ ์ ๋ฌํ์ฌ, ์ด์ ์ํ๋ก ๋ณต์ํ ์ ์์ต๋๋ค.
์ฅ์ : ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์๊ณ ๋ณด์กดํ๋ฉฐ, ์ธ์ ๋ ์ง ํน์ ์์ ์ ์ํ๋ก ๋ณต์ํ ์ ์๊ธฐ ๋๋ฌธ์, ์์ ์ทจ์(undo) ๊ธฐ๋ฅ์ด๋ ์ค๋ ์ท ๊ด๋ฆฌ์ ์ ์ฉํฉ๋๋ค.
Last updated