[iOS] Realm 을 사용해 보자!

"Let's use Realm"

Posted by JacksonJang on March 21, 2024

(종결) 그럼 Realm 은 어떻게 읽는가??

공식 사이트에 따르면, Realm은 “렘”으로 발음합니다.

iOS 톡방 중 Realm에 대한 발음에 대한 논란 사진.jpg

Realm 이란?

Realm 은 모바일 데이터베이스 라이브러리로 Android, iOS, Tablets, Wearables 에서도 사용 가능한 라이브러리 입니다.

Core Data나 SQLite의 대안으로 나온 라이브러리로 매우 빠르며, 대량의 데이터를 처리할 수 있으며 간단한 사용법으로 데이터 관리, 서버와의 실시간 동기화, 다중 플랫폼 지원이 가능합니다.

하지만, 이렇게 성능이 좋은 만큼 데이터베이스 파일의 크기가 커질 수 있으며 Core Data나 SQLite에 비해 다양한 기능이 있어서 러닝커브가 살짝 높습니다.

Realm 은 struct 사용이 불가능하다!

왜 Realm은 class만 사용 가능하고, struct 는 불가능 할까?

[공식 Realm Githubhttps://github.com/realm/realm-swift)에서도 struct가 아닌 class 로만 예제가 되어 있는데.. 왜 그런지 궁금 했었다.

1
2
3
4
5
// Define your models like regular Swift classes
class Dog: Object {
    @Persisted var name: String
    @Persisted var age: Int
}

Realm을 사용하려면 우선 Object 를 상속 받아야 하는데, Object가 class 타입이라 struct에서는 사용이 불가능하다. 왜냐하면 struct 에서는 프로토콜로 인한 확장은 가능하지만 상속은 불가능하기 때문에!

사용 시 주의사항

Object를 상속받고, 반드시 속성 앞에 @Persisted 를 지정해 주세요.

그렇지 않으면 Realm에서 관리되지 않아서 저장 및 조회가 안됩니다!

Realm 저장

실제 공식 Realm Github 에서는 저장할 때, update: .modified 파라미터 없이 realm.add(user) 로만 사용되어 있다.

이는 기본적으로 update 파라미터는 error로 설정되어 있다.
(아래사진 참조)

따라서, 중복으로 저장된다면 에러가 발생하므로 저는 아래와 같이 중복으로 저장되어 있다면 modified 하는 것을 추천드립니다.

1
2
3
4
let realm = try! Realm()
try realm.write {
    realm.add(user, update: .modified)
}

Realm 조회

1
2
let realm = try! Realm()        
let savedUsers = realm.objects(User.self)

Realm 예제

저장과 조회에 대한 간단한 예시 코드를 작성했습니다.
https://github.com/JacksonJang/RealmExample.git