[Swift/Realm] realm 데이터 모델 @persisted의 의미, property wrapper

luvoo·2022년 3월 30일
0

ios study

목록 보기
2/2

Intro

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를 사용한다고 함)

Property Wrapper

@는 swift의 property wrapper를 의미한다.

swift 5.1부터 추가된 기능인데, @Published, @Binding, @State, @available 등이 property wrapper이다.

프로퍼티를 선언하는 동시에, 어떤 행동을 할지를 정해두는 것이라고 할 수 있다. 이미 만들어진 property wrapper를 사용할수도 있고, 직접 property wrapper를 만들어서 원하는 로직을 실행하도록 할 수 있기에 반복되는 코드를 줄여줄 수 있다고 한다. (재사용 용이)

xcode에서 @Persisted가 정의된 코드를 찾아보면..

이런식으로 정의되어 있는 것을 볼 수 있다

@Persisted는 realm에서 정의된 property wrapper이다!

그렇다면 어떤 역할을 하는지 알아보자.

Persistance


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

0개의 댓글