[typescript] 객체의 상태를 저장하고 복원하는 메멘토 패턴과 타입스크립트의 결합 사례
  1. 메멘토 패턴 소개
  2. 타입스크립트에서의 메멘토 패턴 구현
  3. 타입스크립트 메멘토 패턴 예시
  4. 마무리

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. 마무리

타입스크립트에서 메멘토 패턴을 활용하면 객체의 상태를 안전하게 저장하고 복원할 수 있습니다. 이는 객체지향 프로그래밍에서 중요한 원칙인 응집도와 캡슐화를 지키면서 유연한 상태 관리를 가능하게 합니다.

참고 문헌: