iOS 앱에 Realm을 사용하여 사용자 데이터를 저장하고자 하려면
먼저 Realm 데이터 모델을 만들어야 한다.
class UserChatting: Object {
@Persisted var to: String //채팅을 받는 사람의 uid
@Persisted var from: String //채팅을 보내는 사람의 uid
@Persisted var chat: String //보낸 채팅 내용
@Persisted var createdAt: String//채팅을 보낸 시간
//PK
@Persisted(primaryKey: true) var _id: ObjectId
convenience init(to: String, from: String, chat: String, createdAt: String) {
self.init()
self.to = to
self.from = from
self.chat = chat
self.createdAt = createdAt
}
}
이런식으로 어떤 데이터를 어떤 형식으로 저장할지에 대한 정보를 만들어야 한다.
이때, @Persisted라는 것을 사용하는데 어떤 의미인지 알아보자.
(구버전에서는 @objc를 사용했는데 최신버전10.24에서는 @Persisted를 사용한다고 함)
@는 swift의 property wrapper를 의미한다.
swift 5.1부터 추가된 기능인데, @Published, @Binding, @State, @available 등이 property wrapper이다.
프로퍼티를 선언하는 동시에, 어떤 행동을 할지를 정해두는 것이라고 할 수 있다. 이미 만들어진 property wrapper를 사용할수도 있고, 직접 property wrapper를 만들어서 원하는 로직을 실행하도록 할 수 있기에 반복되는 코드를 줄여줄 수 있다고 한다. (재사용 용이)
xcode에서 @Persisted가 정의된 코드를 찾아보면..
이런식으로 정의되어 있는 것을 볼 수 있다
@Persisted는 realm에서 정의된 property wrapper이다!
그렇다면 어떤 역할을 하는지 알아보자.
persist의 사전적 의미는 ‘지속하다', ‘계속하다'와 같다.
어플리케이션에서 Realm을 사용하는 이유도 생각해보자
왜 Realm을 사용해야할까?
→ 앱을 종료하더라도 유지되야하는 데이터가 있음(ex. 사용자 정보)
즉, persist한 데이터를 필요로 하기 때문에 사용하는 것이다.
Realm에선 @Persisted라는 property wrapper를 사용해서 persistance를 가진 데이터를 관리할 수 있게 한다.
어떻게 Persisted하게 관리할지는 property wrapper가 알아서 처리한다고 보면 된다.
Realm 데이터 모델을 정의할때 @Persisted만 명시해두면 된다.
+)
Realm 이외에 Persistance를 가지는 데이터를 다루는 다른 방법에는 UserDefaults, Property List, SQLite, CoreData 등이 있다.
RealmSwift 10.24.0의 공식문서
https://www.mongodb.com/docs/realm-sdks/swift/latest/Structs/Persisted.html