2022. 9. 19. 15:48ใios
iOS - Realm
Realm์ด๋?
SQLite์ ์ฝ์ด ๋ฐ์ดํฐ์ ๋์์ฑ ์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ์กฐํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
swift์๋ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์์ ์ ์งํ๊ธฐ ์ํด ์ฝ๊ฒ ์ฌ์ฉํ๋ UserDefaults๊ฐ ์๋ค.
๊ทธ๋ผ Realm์ ์ ์ฌ์ฉํ ๊น?
์ฐ์ ๋ก์ปฌ ํ๊ฒฝ์์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๋ค์ ์์๋ณด์.
UserDefaults, SQLite, Core Data, Realm
UserDefaults๋ ๊ธฐ๊ธฐ์์ ์ค์ ํ ํ๋ฉด์ ๋คํฌ๋ชจ๋ ์ฌ๋ถ, ์ํฅ ์๋ฆฌ ์ค์ ๋ฑ์ค์ํํธ์ ์์ ๊ฐ์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌํ๋ค.
SQLite์ sql์ ์ด์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ๋ฒ ์ด์ค ์์ง์ด๊ธฐ ๋๋ฌธ์์ด์ ์ต์ํ์ฌ๋๋ค์ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค. ํ์ง๋ง ๋ค๋ฅธ ๊ฒ๋ค์ ๋นํด ๊ฐ์ ธ์ค๋ ์๋๊ฐ ๋๋ฆฌ๋ค.
Core Data๋ Xcode๋ด๋ถ์์ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ํ ํํ๋ก ๋ณผ ์ ์๋ ํ๋ ์์ํฌ์ด๋ค.์ฌ์ฉํ๊ธฐ ์ํด ๊ฝค ๋ง์ ์ค์ ์ ํด์ผํ๋ ๋จ์ ์ด ์๋ค.
Realm์ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์ SQLite์ CoreData๋ณด๋ค ์์ ์๋๊ฐ ๋น ๋ฅด๋ฉฐํฌ๋ก์ค ํ๋ซํผ์ ์ง์ํด์ ํ์ผ ๊ณต์ ๊ฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค.
Realm์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์
1. ์ค์น
ํ๋ก์ ํธ ๋ด์ podfile์ ๋ง๋ค๊ณ
pod 'RealmSwift', '~>10' ์ ์ถ๊ฐํ ๋ค
pod install์ ํ๋ค.
2. Model ์ ์
Realm์๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฒด ํํ๋ก ์ ์ฅ์ด ๋๋ค.์ด๋ฅผ ์ํด์ Modelํ์ผ์ ์ ์ฅํ ๋ฐ์ดํฐ๋ชจ๋ธ์ ์ ์ํ๋ค.
(ํด๋์ค๋ Objectํ๋กํ ์ฝ์ ๋ฐ๋ฅด๊ฒ ํ๊ณ ๋ณ์ ์์๋ @Persisted๋ฅผ ๋ถ์ฌ์ค๋ค.)
Ex)
import Foundation
import RealmSwift
class Category: Object {
@Persisted var name: String = ""
@Persisted var items = List<Item>()
}
3. ์์ฑํ๊ธฐ
write ์ฝ๋ฐฑํจ์ ์์ add๋ฉ์๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ ์ฅ์์ ์ ์ฅํ๋ค.
์ฌ๊ธฐ์ category๋ ๋จ์ํ array๊ฐ ์๋ Result<Category>ํ์ ์ผ๋ก ๋์ด์๋ค.
๋๋ฌธ์ ํ์ ์ Result<Category>๋ก ๋ฐ๊ฟ์ผ ํ๊ณ ,
realm ๋ฐ์ดํฐ์ ์ฅ์๋ add๋ง ํ๋ค๋ฉด ์๋์ผ๋ก ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์
CoreData์ฒ๋ผ ์์์ ์ธ ๋ฐฐ์ด์ ๊ฐ์ ์ถ๊ฐํ๊ณ ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํ๋
์ผ์ ํ์ง ์์๋ ๋๋ค.
Ex)
let newCategory = Category()
newCategory.name = self.textField.text!
do {
try realm.write({
realm.add(category)
})
} catch {
print("Error!")
}
4. ๋ถ๋ฌ์ค๊ธฐ
realm.objects๋ฅผ ์ด์ฉํด์ ๋งค๊ฐ๋ณ์์ ํ์ ์ ํด๋นํ๋ ๊ฐ์ฒด๋ค์ ๋ถ๋ฌ์จ๋ค.Ex)
func loadCategories() {
categoryArray = realm.objects(Category.self)
}
5. ์ ๋ฐ์ดํธ
ํน์ ๊ฐ์ฒด๋ฅผ ๋ฝ์๋ด๊ณ write๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค.
Ex)
if let item = TodoList?[indexPath.row] {
do {
try realm.write({
item.done = !item.done
})
} catch {
print("error updating check property")
}
}
6. ์ญ์ ํ๊ธฐ
Ex)
if let item = TodoList?[indexPath.row] {
do {
try realm.write({
realm.delete(item)
})
} catch {
print("error deleting item")
}
}
'ios' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift - 2์ง์๋ก ๋ณํํ๊ธฐ (0) | 2022.09.27 |
---|---|
Swift - ์์คํค์ฝ๋ ๋ณํํ๊ธฐ (0) | 2022.09.27 |
Swift - ํด๋์ค ์์๊ณผ ์ฌ์ ์ (1) | 2022.07.06 |
swift - ์ฑ๊ธํค ํจํด (0) | 2022.07.05 |
Swift - ์ด๊ฑฐํ(enum), ์์๊ฐ, ์ฐ๊ด๊ฐ (0) | 2022.06.30 |