티스토리 뷰

반응형

안녕하세요 Gons 입니다.

오늘은 로컬에 데이터를 저장할 수 있는 라이브러리

Realm 을 사용해보겠습니다.

 

디바이스에 데이터 베이스를 저장하는 방법이 여러가지가 있는데요

 

UserDefaults 는 많이들 사용하고 계실 것 같은데

간단한 정보만 저장할 수 있습니다. (id, pw, 자동로그인 설정 정도)

 

Core Data 는 Xcode 에서 지원하는 기능으로

이것도 좋습니다. 다음에 한번 사용해보겠고요

 

Realm 은 코어데이터보다 빠릅니다. 무료입니다. 많은 데이터를 저장할 수 있습니다.

Android 와 db 를 공유할 수 있습니다.

 

 

 

 

 

시작하겠습니다.

 

 

 

먼저 RealmSwift 사이트에 접속해주세요.

https://realm.io/kr/docs/swift/latest/

 

 

 

 

Realm Studio 다운받아주세요.

Realm Studio

Realm Studio 는 db 파일을 보는 프로그램입니다.

없어도 되지만 없으면 print 해서 값을 계속 찍어보면 되고요

있으면 실시간으로 변하는 데이터를 눈으로 확인할 수 있습니다.

 

 

 

 

 

 

설치

다운받은 파일 열어서 왼쪽에 Realm Studio.app 을 오른쪽 Applications 폴더에 드래그 앤 드롭해주세요.

 

 

 

 

 

 

당활하지마세요.

처음 실행하면 이렇게 막힐텐데

 

 

 

 

 

 

설정
보안 및 개인 정보 보호
Realm Studio.app 확인 후에 "확인 없이 열기" 클릭

 

 

 

 

이제 다시 실행하면

열기

열기 눌러서 실행할 수 있습니다.

 

 

 

 

 

Realm Studio

잘 실행 됐습니다.

이제 코드 좀 적고 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 데이터 삭제하고 다시 쓰는거는 밑에서 설명합니다.)

 

 

 

파일 경로가 나오는데 (시뮬레이터인 경우)

Realm 파일 위치

괄호 친 부분을 복사해주세요.

 

 

 

 

 

 

 

Finder

파인더를 열고 

상단에 이동 - 폴더로 이동을 눌러주세요.

단축키커맨드⌘ 쉬프트⇧ G 입니다.

 

 

 

방금 복사한 경로를 붙여넣어서 이동해주세요.

Finder - 커맨드⌘ 쉬프트⇧ G

 

 

default.realm

실행해주세요.

 

 

 

 

default.realm

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)

 

 

 

 

realm.objects(클래스.self)

잘 가져오네요.

 

 

 

 

 

 

필터해서 가져와보겠습니다.

// 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 을 사용하면 간단하게 디바이스에 정보를 저장할 수 있습니다.

쉽고 빠릅니다. 좋습니다.

 

 

저는 다음에 또 좋은 정보로 글을 쓰겠습니다.

감사합니다.

반응형
댓글
300x250
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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
Total
Today
Yesterday