클래스의 데이터를 저장하고 나중에 다시 복원해야 하는 경우가 있습니다. 이를 위해 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