티스토리 뷰
UserDefaults와 CoreData에 이어서 Realm을 알아보자.
Realm Home
Build better apps, faster
realm.io
Why Use Realm ?
- Realm은 Core Data, SQLite보다 심플하다.
- iOS와 Android 모두 지원한다.
- Zero-copy 디자인 덕분에 빠르다.
바로 사용해보자
설치
Install Realm for iOS, macOS, tvOS, and watchOS — Realm
Realm Database should only add around 5 to 8 MB to your app's download size. The releases we distribute are significantly larger because they include support for the iOS, watchOS and tvOS simulators, some debug symbols, and bitcode, all of which are stripp
www.mongodb.com
SPM(Swift Package Manager) 으로 설치를 진행했다.
https://github.com/realm/realm-swift.git
위 깃주소를 우상단 복사 붙여 넣기
Realm, RealmSwift 체크 후 Add Package
👍
Realm Studio 설치
Realm Studio는 데이터 베이스 파일을 시각적으로 보고, 편집하고, 디자인할 수 있는 도구이다.
Install Realm Studio — Realm
If you want a file type that isn't listed here, such as a .zip file, view the release page for the version you want. You'll find a complete list of installers for each version.
www.mongodb.com
Realm 사이트에서 설치하자.
👍
Object Model 정의하기
Quick Start - Swift SDK — Realm
www.mongodb.com
// Person.swift
import RealmSwift
class Person: Object {
@Persisted(primaryKey: true) var _id: String
@Persisted var name: String
@Persisted var age: Int
}
Realm 데이터 베이스에 저장할 객체 모델 클래스는 Object를 상속한다. 또한 속성에는 @Persisted를 붙여줘야 한다.
PrimaryKey는 고유한 Key값으로 단 하나만 존재 가능하다. 이미 존재하는 Primary Key를 데이터 베이스에 추가하려고 하면 에러가 발생한다.
Create
func createPerson() {
//Realm 가져오기
let realm = try! Realm()
try! realm.write {
let newPerson = Person()
newPerson._id = "1"
newPerson.name = "에코"
newPerson.age = 26
realm.add(newPerson)
}
}
저장된 위치는
print(Realm.Configuration.defaultConfiguration.fileURL!)
파인더에서 Documents까지 이동해보면
Realm파일이 있다.
아까 다운로드한 Realm Studio로 파일을 확인해보면
데이터가 잘 추가된 게 보인다.
Read
func readPerson() {
//Realm 가져오기
let realm = try! Realm()
let people = realm.objects(Person.self)
let person = realm.object(ofType: Person.self, forPrimaryKey: "1") // Optional
// print(people)
// print(person)
}
realm.objects로 전체 Person 데이터를 가져올 수 있고, PrimaryKey가 존재한다면 realm.object로 특정 PrimaryKey Data를 가져올 수 있다.
object를 이용해 데이터를 가져오면 primaryKey가 없을 수도 있기 때문에 Optional 타입이다.
Filter Data
추가로 filter를 이용해 특정 데이터만 조회해보자
Filter Data - Swift SDK — Realm
String sorting and case-insensitive queries are only supported for character sets in 'Latin Basic', 'Latin Supplement', 'Latin Extended A', and 'Latin Extended B' (UTF-8 range 0-591).
www.mongodb.com
func readPerson() {
//Realm 가져오기
let realm = try! Realm()
let people = realm.objects(Person.self)
let twentySix = people.filter("age == 26") // people중 age가 26인 데이터
let teemo = people.filter("name CONTAINS[c] '티모'") // //people중 name에 '티모'가 포함된 데이터
print(twentySix)
print(teemo)
}
filter 내부에 query문을 넣어서 특정 데이터만 가져올 수 있다.
query는 다음번에 더 자세하게 다뤄보도록 하자.
Update
func updatePerson() {
let realm = try! Realm()
let people = realm.objects(Person.self)
let person = people.filter("name == '티모'").first!
try! realm.write {
person.name = "올라프"
person.age += 5
}
}
name속성이 티모인 객체 중에 첫 번째 객체의 name과 age속성을 변경해 주었다.
만약 Primary Key가 존재한다면
try! realm.write {
let person = Person(value: ["_id": "1", "name": "오리아나"])
realm.add(person, update: .modified)
}
이런 식으로도 Update가 가능하다. add를 해줬기에 id (Primary Key)에 해당하는 객체가 없다면 그 객체를 추가한다.
Delete
func deletePerson() {
let realm = try! Realm()
let person = realm.objects(Person.self).filter("name == '오리아나'")
try! realm.write {
realm.delete(person)
//전체 삭제
//realm.deleteAll()
}
}
여기까지 Realm에서 꼭 필요하다고 생각하는 것들만 정리해보았다. 더 많은 내용은 공식 문서를 참고하자. Realm 공식문서
'iOS' 카테고리의 다른 글
iOS) UILabel의 속성 변경 (feat. 특정 문자만 변경) (0) | 2022.09.28 |
---|---|
iOS) UIView에 Border 적용하기 (0) | 2022.09.01 |
iOS) CoreData 사용하기 (CRUD 구현) (0) | 2022.08.28 |
iOS) UserDefaults 사용해 데이터 저장하기 (0) | 2022.08.25 |
iOS) CocoaPods - pod install error 해결방법 (0) | 2022.08.23 |
- Total
- Today
- Yesterday
- 2023 회고
- BOJ 1935
- autolayout
- git
- sheetPresentationController
- BOJ 10808
- Gradient View
- UICollectionView Error
- Custom Detent
- Sheet Height
- Carousel Effect
- BOJ 10820
- ios
- NaverMaps
- 요시푸스
- Stack
- CAGradientLayer
- UICollectionView banner
- Card CollectionVIew
- crud
- bottom sheet
- swift
- github
- Algorithm
- 1406 에디터
- BOJ 10866
- BOJ 10809
- BOJ 17413
- BOJ 17298
- BOJ 10799
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |