[kotlin] 메멘토 디자인 패턴과 코틀린
  1. 메멘토 디자인 패턴
  2. 코틀린에서의 메멘토 패턴 구현

1. 메멘토 디자인 패턴

메멘토 디자인 패턴은 객체의 내부 상태를 캡슐화하여 이후에 상태를 복구할 수 있게 하는 행위 패턴 중 하나이다. 이 패턴은 객체의 상태를 저장하고 필요에 따라 복원할 수 있는 기능을 제공하여, 상태의 변화를 추적하거나 원하는 시점으로 돌아갈 수 있는 기능을 구현하는 데 유용하다.

메멘토 디자인 패턴은 주로 Originator 객체(원본 객체)와 Memento 객체(상태를 저장하는 객체) 그리고 Caretaker 객체(상태를 관리하는 객체)로 구성된다. Originator는 자신의 상태를 저장하거나 복원하기 위해 Memento를 생성하거나 사용하며, CaretakerMemento를 관리하고 필요에 따라 Originator에게 상태를 복원할 것을 요청한다.

2. 코틀린에서의 메멘토 패턴 구현

코틀린에서 메멘토 패턴을 구현하는 방법은 data class를 사용하여 간단하게 상태를 저장하고 복원할 수 있다. 아래는 메멘토 패턴을 코틀린으로 구현한 예시이다.

// Originator
data class Originator(var state: String) {
    fun createMemento(): Memento {
        return Memento(state)
    }

    fun restore(memento: Memento) {
        state = memento.state
    }
}

// Memento
data class Memento(val state: String)

// Caretaker
class Caretaker {
    private val mementos = mutableListOf<Memento>()

    fun addMemento(memento: Memento) {
        mementos.add(memento)
    }

    fun getMemento(index: Int): Memento {
        return mementos[index]
    }
}

위의 예시에서 Originator는 상태를 저장하거나 복원하기 위해 Memento를 생성한 후 Caretaker에게 상태를 복원할 것을 요청한다. CaretakerMemento를 관리하고 필요에 따라 Originator에게 상태를 복원할 수 있도록 기능을 제공한다.

이렇게 코틀린에서는 간단하게 메멘토 패턴을 구현할 수 있으며, 객체의 상태를 저장하고 복원하는 기능을 구현할 때 유용하게 활용할 수 있다.

참고 자료