Realm
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Realm에 대해 학습하고 간단히 사용해보려 합니다💁🏻
사실 원래부터 하도 화제라 해보려했는데 까먹고 있다가...
근데 지금은 또 Realm이 한국 지원을 안한다고해서 의미가 있나 싶다가도..
그냥 일단 해봅니다🚀
Realm?
렘? 렐름? 리얼엠? 뭐라 읽죠 이거..?
파파고로 돌려봤는데 레음이라고 들려요 저는!
그래서 저는 렘이라고 부르고있습니다ㅎㅎ
그래서 렘이 뭐냐!
렘은 안드로이드와 iOS에 대표적으로 모바일에 최적화한 모바일 DB로 크로스 플랫폼이라고 볼 수 있습니다.
흔히 많이 사용하는 SQLite와 CoreData와 같은 역할을 해줍니다.
ORM보다 빠릅니다.
렘은 오프라인에서도 잘 작동하며 모바일에 최적화되 가볍고 메모리, 디스크 공간 및 베터리 수명에 탁월해요👍
Realm 사용하기
1. Realm 설치
우선 라이브러리를 설치해야됩니다.
https://github.com/realm/realm-swift
아래가 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
RealmStudio 사용하기
https://docs.realm.io/sync/realm-studio/
에서 툴을 다운받아 사용하면 더 편리하게 Realm에 저장된 정보들을 볼 수 있습니다
마무리
렘 드디어! 해봤습니다ㅎㅎ
아주 간단하고 코어데이터보다 더 쉽네요ㅎㅎ 빠르고💪
재밌는 경험이였습니다🧐
[참고자료]
https://docs.mongodb.com/realm-legacy/kr/docs/swift/latest.html