[행동 패턴] Memento Pattern

suojae·2024년 1월 28일
0

[iOS] 디자인패턴

목록 보기
8/10

메멘토란 뜻은 사람이나 이벤트를 기억하기 위한 물건, 기념물이다.
메멘토 패턴은 객체의 히스토리를 관리하고 싶을 때 사용한다.
메멘토 패턴을 이용하면 객체의 상태를 특정 시점에 저장하고, 필요할 때 그 상태로 되돌릴 수 있다.

import Foundation

class CatMemento {
    let uuid: UUID
    let createdTime: Date
    let age: Int
    let height: Int

    init(age: Int, height: Int) {
        self.uuid = UUID()
        self.createdTime = Date()
        self.age = age
        self.height = height
    }
}

class Cat {
    var age: Int
    var height: Int

    init(age: Int, height: Int) {
        self.age = age
        self.height = height
    }

    func speak() {
        print("\(self.age) year old, \(self.height) cm, meow")
    }

    func createMemento() -> CatMemento {
        return CatMemento(age: self.age, height: self.height)
    }

    func restore(memento: CatMemento) {
        self.age = memento.age
        self.height = memento.height
    }
}

var catHistory = [CatMemento]()

let cat = Cat(age: 0, height: 10)
catHistory.append(cat.createMemento())

cat.age = 1
cat.height = 25
catHistory.append(cat.createMemento())

cat.age = 2
cat.height = 50
catHistory.append(cat.createMemento())

cat.speak()
cat.restore(memento: catHistory[0])
cat.speak()

//2year old, 50cm, meow
//0year old, 10cm, meow
profile
Hi 👋🏻 I'm an iOS Developer who loves to read🤓

0개의 댓글