Library

Realm

GREEN.1229 2022. 2. 17. 20:00

안녕하세요. 그린입니다🟢

이번 포스팅에서는 Realm에 대해 학습하고 간단히 사용해보려 합니다💁🏻

 

사실 원래부터 하도 화제라 해보려했는데 까먹고 있다가...

근데 지금은 또 Realm이 한국 지원을 안한다고해서 의미가 있나 싶다가도..

그냥 일단 해봅니다🚀

Realm?

렘? 렐름? 리얼엠? 뭐라 읽죠 이거..?

파파고로 돌려봤는데 레음이라고 들려요 저는!

그래서 저는 렘이라고 부르고있습니다ㅎㅎ

그래서 렘이 뭐냐!

렘은 안드로이드와 iOS에 대표적으로 모바일에 최적화한 모바일 DB로 크로스 플랫폼이라고 볼 수 있습니다.

흔히 많이 사용하는 SQLite와 CoreData와 같은 역할을 해줍니다.

ORM보다 빠릅니다.

렘은 오프라인에서도 잘 작동하며 모바일에 최적화되 가볍고 메모리, 디스크 공간 및 베터리 수명에 탁월해요👍

Realm 사용하기

1. Realm 설치

우선 라이브러리를 설치해야됩니다.

https://github.com/realm/realm-swift

 

GitHub - realm/realm-swift: Realm is a mobile database: a replacement for Core Data & SQLite

Realm is a mobile database: a replacement for Core Data & SQLite - GitHub - realm/realm-swift: Realm is a mobile database: a replacement for Core Data & SQLite

github.com

아래가 Swift에서의 렘 사용 라이브러리 깃헙 주소에요!

코코아팟이나 SPM등 라이브러리 관리 툴을 이용해 설치해줍니다.

코코아팟은 아래와 같이 설정

pod 'RealmSwift'

SPM은 패키지 경로 추가

https://github.com/realm/realm-swift

저는 SPM으로 했습니다!

 

2. Realm 구현하기

- Realm 데이터 타입 클래스 생성

import Foundation
import RealmSwift

class RealmData: Object {
  @objc dynamic var name = ""
  @objc dynamic var age = 0
}

이렇게 Object를 상속받아 데이터를 만들어줍니다!

기본 데이터 타입 클래스 생성은 끝났습니다ㅎㅎ

 

-Realm에 데이터 저장하기

private func setRealmData() {
  let realmData = RealmData()
  realmData.name = "그린"
  realmData.age = 100
  
  let realm = try! Realm()
  try! realm.write {
    realm.add(realmData)
  }
}

이렇게 RealmData 인스턴스를 만들고 그 안에 name/age 데이터의 값을 넣어줍니다.

그다음 해당 인스턴스를 Realm 객체를 만들어 그 안에 write로 add해줍니다🙋🏻

 

- Realm에 저장된 데이터 가져오기

private func getRealmData() -> RealmData {
  let realm = try! Realm()
  let filteredData = realm.objects(RealmData.self)
    .filter("age > 50")
  let arrData = Array(filteredData)
  guard let resultData = arrData.first else { return RealmData() }
  
  return resultData
}

데이터 저장하는것과 유사합니다.

우선 Realm 인스턴스를 만들고 objects 메서드를 이용합니다.

해당 메서드 인자의 타입은 만들어놓은 Realm 데이터 클래스 타입으로 해줍니다.

만약 여기서 필터를 저처럼도 걸어주셔서 원하는 데이터만 받아올 수 있어요!

로컬 디바이스에 차곡차곡 저장되는 특성이 있음으로 Array 타입이에요.

그렇기에 배열의 원하는 요소의 값을 가져올 수 있도록 하거나 커스텀하게 사용할 수 있어요!

저는 최신꺼를 가져오게끔 first 인덱스를 가져왔습니다!

그리고 RealmData 타입을 반환해줍니다🚀

 

- Realm에 저장된 데이터 삭제하기

private func removeRealmData() {
  let realm = try! Realm()
  try! realm.write {
    realm.delete(realm.objects(RealmData.self))
  }
}

아주 쉽습니다.

저장했던것처럼 add 대신 delete해줍니다.

안에 인자로 objects 메서드를 이용해 필터를 걸어줄 수도 있습니다🙌

 

- SwiftUI에서 해당 구현한 메서드 적용해보기

import SwiftUI
import RealmSwift

struct RealmSampleView: View {
  @State var name: String = "이름 데이터를 가져와주세요."
  @State var age: String = "나이 데이터를 가져와주세요."
    var body: some View {
      Button("Set Realm Data") {
        setRealmData()
      }
      Button("Get Realm Data") {
        let realmData = getRealmData()
        name = realmData.name
        age = String(realmData.age)
      }
      Button("Remove Realm Data") {
        removeRealmData()
      }
      Text(name)
      Text(age)
    }
}

버튼 3개를 가지고 위 세가지 기능을 동작하도록 해줍니다.

텍스트 2개는 렘 데이터에 들어있는 값들을 바인딩해줍니다👍

 

3. 시뮬레이터 구동해보기

위와 같이 구현됩니다!

해당 프로젝트 구현한것은 깃헙에 올려두겠습니다🙌

https://github.com/GREENOVER/playground/tree/main/realmTest

 

GitHub - GREENOVER/playground: 학습을 하며 간단한 예제들을 만들어 보는 작고 소중한 놀이터

학습을 하며 간단한 예제들을 만들어 보는 작고 소중한 놀이터. Contribute to GREENOVER/playground development by creating an account on GitHub.

github.com

RealmStudio 사용하기

https://docs.realm.io/sync/realm-studio/

 

Realm Studio - Realm Sync (LEGACY)

During development, you may want to export your schema for consistency and ease of use across definitions. For example, you may have already created your schema in an existing iOS application and now need to declare the same schema in your Android app. Cre

docs.realm.io

에서 툴을 다운받아 사용하면 더 편리하게 Realm에 저장된 정보들을 볼 수 있습니다

 

마무리

렘 드디어! 해봤습니다ㅎㅎ

아주 간단하고 코어데이터보다 더 쉽네요ㅎㅎ 빠르고💪

재밌는 경험이였습니다🧐

 

[참고자료]

https://docs.mongodb.com/realm-legacy/kr/docs/swift/latest.html

 

Realm: 리액티브 모바일 애플리케이션을 손쉽고 빠르게 만드세요

 

docs.mongodb.com