[typescript] 객체의 상태를 저장하고 복원하는 메멘토 패턴과 타입스크립트의 결합 사례
- 메멘토 패턴 소개
- 타입스크립트에서의 메멘토 패턴 구현
- 타입스크립트 메멘토 패턴 예시
- 마무리
1. 메멘토 패턴 소개
메멘토 패턴은 객체의 상태를 저장하고 나중에 복원할 수 있는 디자인 패턴입니다. 주로 객체의 상태를 저장하고, 이전 상태로 되돌리거나 복원할 때 사용됩니다. 이는 특히 객체의 상태를 캡슐화하고 외부에 노출하지 않아야 할 때 유용합니다.
2. 타입스크립트에서의 메멘토 패턴 구현
타입스크립트에서 메멘토 패턴을 구현할 때, 먼저 상태를 저장하고 복원할 수 있는 메멘토 클래스와 상태를 가지고 있는 오리지널 클래스가 필요합니다. 또한, 클라이언트는 상태를 저장하고 복원하는 기능을 사용할 수 있어야 합니다.
3. 타입스크립트 메멘토 패턴 예시
아래는 타입스크립트로 메멘토 패턴을 구현한 예시입니다.
class Originator {
private state: string;
constructor(state: string) {
this.state = state;
}
public set(state: string): void {
this.state = state;
}
public saveToMemento(): Memento {
return new Memento(this.state);
}
public restoreFromMemento(memento: Memento): void {
this.state = memento.getState();
}
}
class Memento {
private state: string;
constructor(state: string) {
this.state = state;
}
public getState(): string {
return this.state;
}
}
class Caretaker {
private mementos: Memento[] = [];
public addMemento(memento: Memento): void {
this.mementos.push(memento);
}
public getMemento(index: number): Memento {
return this.mementos[index];
}
}
// 사용 예시
const originator = new Originator("상태1");
const caretaker = new Caretaker();
caretaker.addMemento(originator.saveToMemento());
originator.set("상태2");
caretaker.addMemento(originator.saveToMemento());
originator.set("상태3");
console.log(originator); // 현재 상태: 상태3
originator.restoreFromMemento(caretaker.getMemento(1));
console.log(originator); // 이전 상태: 상태2
위 예시에서 Originator
클래스는 상태를 가지고 있으며, Memento
클래스는 상태를 저장하는 역할을 합니다. Caretaker
클래스는 Memento
를 관리합니다. 이를 통해 상태를 저장하고 복원할 수 있습니다.
4. 마무리
타입스크립트에서 메멘토 패턴을 활용하면 객체의 상태를 안전하게 저장하고 복원할 수 있습니다. 이는 객체지향 프로그래밍에서 중요한 원칙인 응집도와 캡슐화를 지키면서 유연한 상태 관리를 가능하게 합니다.
참고 문헌:
- Gamma, E. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.