Trulyawesome

[Swift] Realm 사용방법 본문

프로그래밍/iOS

[Swift] Realm 사용방법

ethkelitt 2020. 8. 8. 19:04

오늘은 Realm을 사용해보았습니다. Realm은 모바일에 최적화된 데이터베이스입니다. 서버를 따로 구축할 필요없이 손쉽게 데이터베이스를 사용할 수 있다는 장점이 있습니다.

RealmSwift 설치

cocoapod을 이용하여 설치합니다.

  • 해당 프로젝트 디렉토리로 이동 후 pod init 을 하여 podfile 을 생성해줍니다.
  • podfile에서 pod 'RealmSwift'를 추가해줍니다
  • pod install명령어로 설치해줍시다
  • 설치를 완료한 후 해당 프로젝트 소스에 import RealmSwift를 해주시면 됩니다.

Model 설정

1
2
3
4
5
6
7
8
9
10
11
@objcMembers class Portfolio: Object {
    dynamic var stockName: String = ""
    dynamic var category: String = ""
    dynamic var amount: Int = 0
    dynamic var price: Int = 0
    dynamic var rate: Double = 0.0
    dynamic var isProfit: Bool = false
    dynamic var profitRate: Double = 0.0
    dynamic var date: Date = Date()
    
}
cs

위와 같이 설정합니다. realm은 Object타입을 사용합니다. 그리고 각 변수 앞에 dynamic을 선언해주어야 합니다.

1
2
3
4
5
6
7
8
9
10
11
class Portfolio: Object {
    @objc dynamic var stockName: String = ""
    @objc dynamic var category: String = ""
    @objc dynamic var amount: Int = 0
    @objc dynamic var price: Int = 0
    @objc dynamic var rate: Double = 0.0
    @objc dynamic var isProfit: Bool = false
    @objc dynamic var profitRate: Double = 0.0
    @objc dynamic var date: Date = Date()
    
}
cs

이렇게 설정해주어도 됩니다.😄

데이터 다루기

전체소스

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class RealmManager {
  private init() {}
    static let shared = RealmManager()
    
    var realm = try! Realm()
    
    func creat<T: Object>(_ object: T) {
        do {
            try realm.write {
                realm.add(object)
            }
            
        } catch {
            print(error)
        }
    }
    
    func update<T: Object>(_ object: T, with dictionary: [String: Any?]) {
        do {
            try realm.write {
                for(key, value) in dictionary {
                    object.setValue(value, forKey: key)
                }
            }
            
        } catch {
            print(error)
        }
    }
    
    func delete<T: Object>(_ object: T) {
        do {
            try realm.write {
                realm.delete(object)
            }
        } catch {
            print(error)
        }
    }
    
    func reset() {
        do {
            try realm.write {
                realm.deleteAll()
            }
        } catch {
            print(error)
        }
    }
}
cs

저는 singleton으로 구현하였습니다. Youtube에서 배워서 아주 유용하게 쓰고있습니다.🔥

설명

1
 var realm = try! Realm()
cs

먼저 이렇게 realm 변수를 선언해줍니다. 이제 이 선언한 realm에서 데이터 추가, 삭제 등의 데이터 핸들링이 이루어 집니다.

- 데이터 쓰기

1
2
3
try realm.write {
                realm.add(object)
            }
cs

- 데이터 삭제

1
2
3
try realm.write {
                realm.delete(object)
            }
cs

위와 같이 realm.write로 데이터관리가 가능합니다 .

나머지는 위에있는 풀소스를 보시면 됩니다.😁

- 저장된 데이터 불러오기

1
2
3
4
 override func viewDidLoad() {
        super.viewDidLoad()
        portfolio = realm.objects(Portfolio.self)
}
cs

realm.objects(모델의 타입.self)으로 데이터를 불러올 수 있습니다.