k-coding
Realm ( 2 ) 본문
Realm ( 2 )
오늘은 Realm Studio를 간단하게 활용하는 방법을 포스팅해보겠습니다.
Realm Studio를 사용하면 Realm을 통하여 저장한 DB를 직관적으로 확인할 수 있습니다.
우선 Realm Studio를 다운 받아야합니다.
https://www.mongodb.com/docs/realm-legacy/kr/products/realm-studio.html
Realm Studio: open, edit, and manage your Realm data
Realm 스튜디오는 Realm 데이터베이스와 Realm 오브젝트 서버의 데이터를 열고 분석하기위한 개발도구 입니다. Realm 스튜디오로 로컬 Realm이다 동기화된 Realm을 쉽게 열고 수정할 수 있으며 Realm 플랫
www.mongodb.com
해당 링크에서 각자 다운을 받으시고 이제 다시 Xcode를 통하여 파일을 열어줍니다.
기본적으로 Realm을 Podfile에 설치하는 방법은 이전 포스트에서 다루었으니 생략하겠습니다.
가장 먼저 객체 모델로 사용할 클래스를 생성해 주셔야 합니다.
import UIKit
import Foundation
import RealmSwift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
class UserDB: Object {
@objc dynamic var id: Int = 0
@objc dynamic var name: String = ""
override static func primaryKey() -> String? {
return "id"
}
}
객체 클래스에서 변수를 선언 할 때 에는 @objc dynamic을 앞에 붙여주셔야 합니다.
그 이유는 추 후에 따로 포스트 해보도록 하겠습니다. :)
해당 클래스 UserDB에서 primaryKey메소드를 통하여 기본키를 설정할 수 있는데
return 값을 id로 받았기 때문에 변수 id가 기본키가 되었습니다.
기본키로 설정 된 변수의 값은 같은 값을 가질 수 없습니다.
무슨 말이냐면 id가 1번인 사람이 생성되면
그 후 부터 id가 1번인 사람이 2명이상이 절대 될 수 없게 만든다는 뜻입니다.
이제 객체 클래스는 두고 다시 ViewController파일로 가시고 Realm을 선언해주어야 합니다.
class ViewController: UIViewController {
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(Realm.Configuration.defaultConfiguration.fileURL!)
}
}
realm이라는 상수를 통하여 Realm 데이터 파일을 만들어주고
RealmStudio를 활용하기 위해서 Realm파일의 위치를 알아야 합니다.
Realm파일의 위치를 알기위해서 viewDidLoad안에 있는
print(Realm.Configuration.defaultConfiguration.fileURL!)
를 입력하고 빌드를 시켜봅시다.
그렇다면 다음과 같이 출력값이 나올탠데 여기서 /Users/chougihun....../Documents/ 까지 복사를 해주고
Finder를 킵시다.
단축키 커맨드⌘ 쉬프트⇧ G를 사용하여 해당 파일의 위치로 이동하면
다음과 같이 Realm Studio가 존재하네요!
클릭하여 켜주시면
깔끔한 UI와 함께 아까 만든 id와 name이 들어있고 id가 기본키로 설정된 DB가 나오게됩니다!
그렇다면 UserDB에 데이터를 추가하면 자동으로 RealmStudio에서 반응할까요?
class ViewController: UIViewController {
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(Realm.Configuration.defaultConfiguration.fileURL!)
addUser()
}
func addUser() {
let user1 = UserDB()
user1.id = 1
user1.name = "최기훈"
let user2 = UserDB()
user2.id = 2
user2.name = "최지오"
try! realm.write {
realm.add(user1)
realm.add(user2)
}
}
}
다음과 같이 사람을 추가하는 메소드를 추가 후 다시 빌드를 하시고, 바로 Realm Studio를 확인하면??
자동으로 최신화 된 모습을 확인할 수 있습니다.
그렇다면 혹시 RealmStudio에서만 추가된것이 아닌지 확인을 해봅시다
class ViewController: UIViewController {
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(Realm.Configuration.defaultConfiguration.fileURL!)
readDB()
}
func readDB() {
let savedDB = realm.objects(UserDB.self)
print(savedDB)
}
}
다음과 같이 작성하고 다시 빌드를 해봅시다!
확인해보니 잘 저장 되어있는모습을 확인할 수 있습니다.
위에 코드를 작성할 때 혹시 다음과 같이 코드를 입력하셨나요?
class ViewController: UIViewController {
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(Realm.Configuration.defaultConfiguration.fileURL!)
addUser()
readDB()
}
func addUser() {
let user2 = UserDB()
user2.id = 1
user2.name = "최기훈"
let user1 = UserDB()
user1.id = 2
user1.name = "최지오"
try! realm.write {
realm.add(user1)
}
}
func readDB() {
let savedDB = realm.objects(UserDB.self)
print(savedDB)
}
}
그렇다면 아래와 같은 오류 화면을 만났을탠데요.
이게 무슨말이냐 하면 기본키로 설정한 값이 겹친다는 뜻입니다.
너가 id를 기본키로 지정하고 id값에 1,2가 들어왔는데 또 1,2가 들어와서 생기는 오류입니다.
addUser()메소드를 잠시 실행 안시켜주시면 해결됩니다.
그럼 DB안에 있는 오브젝트를 삭제하려면 어떻게 하면 될까요?
func deleteDB(){
let savedDB = realm.objects(UserDB.self)
try! realm.write{
realm.delete(savedDB[0])
}
}
위와같이 입력하게 된다면 UserDB에서 첫번째로 있는 값이 지워지게 됩니다. 즉 저희 실습대로하면 id 값 1인 최기훈이 지워지겠네요
func deleteDB(){
let savedDB = realm.objects(UserDB.self)
try! realm.write{
realm.deleteAll()
}
}
deleteAll() 을 사용하면 DB에 모든 오브젝트가 사라지겠네요 확인해볼까요?
값 들이 깔끔하게 사라졌습니다!!
그럼 다시 이번에 오브젝트를 여러게 만들어봅시다.
func addUser() {
let user1 = UserDB()
user1.id = 1
user1.name = "최기훈"
let user2 = UserDB()
user2.id = 2
user2.name = "최지오"
let user3 = UserDB()
user3.id = 3
user3.name = "박슬기"
let user4 = UserDB()
user4.id = 4
user4.name = "김주형"
try! realm.write {
realm.add(user1)
realm.add(user2)
realm.add(user3)
realm.add(user4)
}
}
다시 이 메소드를 활성화 하고 빌드 해주시면
4개의 오브젝트가 생성되었습니다.
이 DB에서 원하는 값만 찾을 수 있을까요?
최지오가 몇번인지 궁금하다면 다음과 같이 메소드를 구성하면 됩니다.
func readDB() {
let savedDB = realm.objects(UserDB.self)
let filter = savedDB.filter("name == '최지오'")
print(filter)
}
name이 최지오인 오브젝트만 걸려서 출력됩니다.
근데 최지오라는 사람을 찾은 이유가 이름이 최지오가 아니라 최지호여서 고치기 위함이라면 어떻게 하면될까요?
func updateDB() {
let savedDB = realm.objects(UserDB.self)
let filter = savedDB.filter("name == '최지오'")
try! realm.write{
filter.first?.name = "최지호"
}
}
다음 메소드는 DB상에 있는 이름이 최지오인 사람을 모두 찾습니다.
그 후 모든 최지오 중에서 순번이 제일빠른 최지오를 최지호로 바꾸게됩니다.
해당 DB에선 최지오는 한명이기 때문에 first를 붙여주었습니다.
그럼 실행 후 RealmStudio를 확인하면
다음과 같이 바뀌어있습니다!
이상 RealmStudio를 활용해서 DB를 직관적으로 확인하는 방법을 알아보았습니다!
'iOS > Xcode' 카테고리의 다른 글
Swift 뷰의 상태변화 메서드 (0) | 2022.04.09 |
---|---|
Realm ( 3 ) (0) | 2022.04.07 |
Realm ( 1 ) (0) | 2022.03.30 |
Xcode Firebase를 이용한 간단한 로그인 구현하기 (0) | 2022.02.16 |
Xcode Swift. Shimmer Animation 만들기 (0) | 2022.02.07 |