[swift] 클래스의 데이터 저장과 복원 방법

클래스의 데이터를 저장하고 나중에 다시 복원해야 하는 경우가 있습니다. 이를 위해 Swift에서는 NSCoding 프로토콜을 사용하여 데이터를 저장하고 복원할 수 있습니다. 이 문서에서는 NSCoding 프로토콜을 이용한 데이터 저장과 복원 방법에 대해 알아보겠습니다.

NSCoding 프로토콜

NSCoding 프로토콜은 Objective-C와 호환성을 제공하는 프로토콜로, 클래스의 객체를 아카이브(archive)하거나 언아카이브(unarchive)하는 기능을 제공합니다.

아카이브는 객체의 데이터를 파일로 저장하는 것을 말하며, 언아카이브는 저장된 파일에서 데이터를 읽어와서 객체로 복원하는 과정을 말합니다.

NSCoding 프로토콜은 encode(with:)init(coder:) 두 가지 메서드를 구현해야 합니다.

데이터 저장하기

아래는 NSCoding 프로토콜을 이용하여 데이터를 저장하는 예제코드입니다.

class Product: NSObject, NSCoding {
    var name: String
    var price: Double

    init(name: String, price: Double) {
        self.name = name
        self.price = price
    }

    required convenience init?(coder aDecoder: NSCoder) {
        guard let name = aDecoder.decodeObject(forKey: "name") as? String,
            let price = aDecoder.decodeDouble(forKey: "price") as Double else {
                return nil
        }
        self.init(name: name, price: price)
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(name, forKey: "name")
        aCoder.encode(price, forKey: "price")
    }
}

위 예제코드에서 Product 클래스는 NSCoding 프로토콜을 준수하기 위해 encode(with:)init(coder:) 메서드를 구현하고 있습니다.

데이터 복원하기

아래는 저장된 데이터를 복원하여 객체를 만드는 예제코드입니다.

func loadProduct() -> Product? {
    if let data = UserDefaults.standard.object(forKey: "productData") as? Data {
        return NSKeyedUnarchiver.unarchiveObject(with: data) as? Product
    }
    return nil
}

위 예제코드에서 loadProduct 함수는 UserDefaults에서 저장된 데이터를 가져와서 NSKeyedUnarchiver를 사용하여 객체로 복원합니다.

NSCoding 프로토콜을 사용하여 클래스의 데이터를 저장하고 복원하는 방법을 알아보았습니다. 이를 통해 앱의 데이터를 보관하고, 나중에 다시 사용할 수 있게 됩니다.

참고 자료

NSKeyedArchiver - Apple Developer Documentation