스터디 6 회차 발표자료 - Memento 패턴

0

Memento 패턴: 이해하기 & 실생활 예시

서론

디자인 패턴은 소프트웨어 개발에서 반복적으로 나타나는 문제들을 효과적으로 해결할 수 있는 해법입니다. 오늘은 그 중에서 객체의 상태를 저장하고 이전 상태로 복원할 수 있는 Memento 패턴에 대해 알아보겠습니다.


Memento 패턴이란?

정의

Memento 패턴은 객체의 상태 정보를 저장하고 필요할 때 해당 상태로 복원할 수 있게 하는 디자인 패턴입니다.

사용하는 이유

객체의 상태를 임시 저장하고 나중에 그 상태로 되돌리는 기능이 필요할 때 사용됩니다.

주요 구성 요소

1. Originator

현재 상태를 저장하고 복원할 수 있는 객체

2. Memento

Originator 객체의 상태를 저장하는 객체

3. Caretaker

Memento 객체를 저장하고 복원하는 객체


동작 원리

Originator는 자신의 상태를 Memento 객체에 저장합니다. Caretaker는 이 Memento 객체를 보관하게 됩니다. 필요할 때 Caretaker는 Memento 객체를 통해 Originator의 상태를 복원할 수 있습니다.


실생활 예시

텍스트 에디터의 '뒤로 가기' 기능: 작성 중인 텍스트의 이전 상태로 되돌리기

게임 내의 '저장 및 불러오기' 기능: 게임의 특정 시점에서의 상태를 저장하고 나중에 불러오기


// Memento 클래스
public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

// Originator 클래스
public class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    public void getStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}

// Caretaker 클래스
public class Caretaker {
    private Memento memento;

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

    public Memento getMemento() {
        return memento;
    }
}

// 메인 클래스
public class MementoPatternDemo {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        originator.setState("상태 #1");
        caretaker.setMemento(originator.saveStateToMemento());

        originator.setState("상태 #2");
        System.out.println("현재 상태: " + originator.getState());

        originator.getStateFromMemento(caretaker.getMemento());
        System.out.println("복원된 상태: " + originator.getState());
    }
}

위의 Java 예제에서 Originator는 상태를 가지며, 이 상태를 Memento에 저장하거나 복원할 수 있습니다. Caretaker는 Memento 객체를 보관하며 필요할 때 Originator에게 제공합니다.

실행 결과는 다음과 같습니다:

현재 상태: 상태 #2
복원된 상태: 상태 #1

이처럼 Memento 패턴을 통해 객체의 상태를 저장하고, 필요할 때 이 상태를 복원할 수 있습니다.


장단점

장점

객체의 상태를 쉽게 복원할 수 있습니다.
객체의 내부 상태에 직접 접근하지 않고도 상태를 저장 및 복원할 수 있습니다.

단점

메모리 사용량이 증가할 수 있습니다.
복잡한 객체 상태를 저장하게 되면 성능 문제가 발생할 수 있습니다.

0개의 댓글