티스토리 뷰
안녕하세요 Gons 입니다.
오늘은 로컬에 데이터를 저장할 수 있는 라이브러리
Realm 을 사용해보겠습니다.
디바이스에 데이터 베이스를 저장하는 방법이 여러가지가 있는데요
UserDefaults 는 많이들 사용하고 계실 것 같은데
간단한 정보만 저장할 수 있습니다. (id, pw, 자동로그인 설정 정도)
Core Data 는 Xcode 에서 지원하는 기능으로
이것도 좋습니다. 다음에 한번 사용해보겠고요
Realm 은 코어데이터보다 빠릅니다. 무료입니다. 많은 데이터를 저장할 수 있습니다.
Android 와 db 를 공유할 수 있습니다.
시작하겠습니다.
먼저 RealmSwift 사이트에 접속해주세요.
https://realm.io/kr/docs/swift/latest/
Realm Studio 다운받아주세요.
Realm Studio 는 db 파일을 보는 프로그램입니다.
없어도 되지만 없으면 print 해서 값을 계속 찍어보면 되고요
있으면 실시간으로 변하는 데이터를 눈으로 확인할 수 있습니다.
다운받은 파일 열어서 왼쪽에 Realm Studio.app 을 오른쪽 Applications 폴더에 드래그 앤 드롭해주세요.
처음 실행하면 이렇게 막힐텐데
이제 다시 실행하면
열기 눌러서 실행할 수 있습니다.
잘 실행 됐습니다.
이제 코드 좀 적고 db 파일 열어보겠습니다.
라이브러리를 설치해주세요.
pod ‘RealmSwift’
※ 설치방법을 모르시면 이전 포스팅 코코아팟 설치 방법을 보고 와주세요.
라이브러리를 추가해주세요.
import RealmSwift
※ 여기서 import 에 RealmSwift 가 안뜨시는분은 커맨드⌘ + B 를 눌러서 한번 빌드하신 후에 진행해주세요.
Person.swift 라는 파일을 생성해주세요.
import Foundation
import RealmSwift
class Person: Object {
@objc dynamic var id:Int = 0
@objc dynamic var age:Int = 0
@objc dynamic var name:String = ""
// id 가 고유 값입니다.
override static func primaryKey() -> String? {
return "id"
}
}
객체 모델로 사용할 클래스 입니다.
id 를 프라이머리 키로 지정했습니다.
primaryKey 가 뭐냐면
나이가 20살인 사람은 여러명이 될 수 있지만
id 가 1인 사람은 여러명이 될 수 없습니다.
id 가 1인 사람이 있는데 id 가 1인 사람을 추가하려고 하면 에러납니다.
그럴 때는 id 가 1인 사람을 지우고 추가하거나 업데이트를 하면 됩니다.
이제 ViewContoller 에서 따라해주세요. import RealmSwift 해주시고요
자 일단 Realm 데이터 파일을 만들겠습니다.
// Realm 가져오기
let realm = try! Realm()
// Realm 파일 위치
print(Realm.Configuration.defaultConfiguration.fileURL!)
( Person 에 id , name , age 로 realm 을 만들었다가
adreess 를 추가한다든지 age 를 뺀다든지 해서
멤버변수가 달라지면 오류가 납니다.
그럴 때는 당황하지 말고, 시뮬레이터에 설치된 프로젝트를 지웠다가 다시 설치해주세요.
Realm 데이터 삭제하고 다시 쓰는거는 밑에서 설명합니다.)
파일 경로가 나오는데 (시뮬레이터인 경우)
괄호 친 부분을 복사해주세요.
파인더를 열고
상단에 이동 - 폴더로 이동을 눌러주세요.
단축키는 커맨드⌘ 쉬프트⇧ G 입니다.
방금 복사한 경로를 붙여넣어서 이동해주세요.
실행해주세요.
Person 클래스가 생긴 것을 확인할 수 있고요
저장할 객체를 만들겠습니다.
//저장할 객체 만들기
let person1 = Person()
person1.name = "철수"
person1.age = 10
person1.id = 1
let person2 = Person()
person2.name = "영희"
person2.age = 20
person2.id = 2
이런식으로 만들어주세요.
저장해보겠습니다.
// Realm 에 저장하기
try! realm.write {
realm.add(person1)
realm.add(person2)
}
값이 들어간 것이 실시간으로 보이네요.
코드로 값을 불러와보겠습니다.
// Person 가져오기
let savedPerson = realm.objects(Person.self)
print(savedPerson)
잘 가져오네요.
필터해서 가져와보겠습니다.
// primary key 필터
let filter1 = savedPerson.filter("id == 1")
print(filter1)
아이디가 1인 값만 가져옵니다.
// String 필터 (이름이 철수인 사람)
let filter2 = savedPerson.filter("name == '철수'")
print(filter2)
String 필터 할 때 '따옴표' 를 유의해서 사용하세요.
// int 필터 (20살 이하인 사람)
let filter3 = savedPerson.filter("age <= 20")
print(filter3)
int 필터로 > , < 다 가능합니다.
개수 확인은 이런식으로
// 개수 확인
print(filter3.count)
특정 오브젝트 값을 업데이트해보겠습니다.
// 값 업데이트
try! realm.write{
filter1.first?.name = "김철수"
}
print(savedPerson)
필터한거는 배열이기 때문에 first 를 붙여줬습니다.
김철수로 잘 바뀌었네요.
특정 오브젝트를 삭제해보겠습니다.
// 특정 오브젝트 삭제
try! realm.write {
realm.delete(savedPerson[0])
}
print(savedPerson)
이렇게 하면 id 1번인게 지워지겠죠? 배열이니까 [0] 쓴거고요.
Person 안의 데이터를 다 삭제해보겠습니다.
// Class 안에 데이터들 전부 삭제
try! realm.write {
realm.deleteAll()
}
이러면 전부 삭제됩니다.
아예 Realm 파일을 삭제할 수 있습니다. (이렇게하면 Person 멤버변수 변경해서 쓸 수 있는 상황)
// 아예 Realm 파일 삭제
let realmURL = Realm.Configuration.defaultConfiguration.fileURL!
let realmURLs = [
realmURL,
realmURL.appendingPathExtension("lock"),
realmURL.appendingPathExtension("note"),
realmURL.appendingPathExtension("management")
]
for URL in realmURLs {
do {
try FileManager.default.removeItem(at: URL)
} catch {
// handle error
}
}
실행하면 아까 그 파일 경로에 Realm 관련 파일들이 전부 사라져있습니다.
끝!
자~ 오늘은 이렇게해서 RealmSwift 를 사용해봤는데요
유익한 시간이었나요?
Realm 을 사용하면 간단하게 디바이스에 정보를 저장할 수 있습니다.
쉽고 빠릅니다. 좋습니다.
저는 다음에 또 좋은 정보로 글을 쓰겠습니다.
감사합니다.
'iOS Library' 카테고리의 다른 글
iOS Swift 라이브러리 CCGestureLock 사용하기 (2) | 2020.07.03 |
---|---|
iOS Swift 라이브러리 Tabman 사용하기 (6) | 2020.07.02 |
iOS Swift 라이브러리 Expandable TableView 사용하기 (0) | 2020.06.30 |
iOS Swift 라이브러리 Alamofire 사용하기 (0) | 2020.06.29 |
iOS Swift 라이브러리 Calendar 사용하기 (8) | 2020.06.26 |
- Total
- Today
- Yesterday
- Localizations
- localizing
- 엑스코드
- 심사
- SKProductsRequestDelegate
- Authorization
- SWIFT
- TabBar
- 아이오에스
- AppStore
- 다국어
- 리젝
- SKPayment
- 프로그레스
- Reject
- ios
- 스위프트
- SKPaymentTransactionObserver
- presentationcompactadaptation
- 인디케이터
- custom segment
- TabView
- indicator
- permission
- swiftUI
- 테이블뷰
- Xcode
- Localized
- 로컬라이징
- Language
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |