iOS - Realm

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")
    }
}