Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- swift
- RealmSwift
- storybaord
- 위클리챌린지
- IOS
- SwiftGen
- parse
- JSONSerialization
- Decodable
- CustomCode
- issecuretextentry
- dynamic height
- JSON
- programmers
- Pod
- UITableView
- 정보처리기사
- JSONParser
- 2018 KAKAO BLIND RECRUITMENT
- 티스토리챌린지
- PageViewController
- pbxfilesystemsynchronizedrootgroup
- pbxgroup
- 정보처리기사 실기 요약본
- cocoapods
- Xcode
- 정보처리기사 실기
- 프로그래머스
- Codable
- Custom PageViewController
Archives
- Today
- Total
iOS 개발일기
[iOS] Realm 사용법 본문
Realm 이란
모바일 환경에 특화되어 있고 No-SQL이며 디스크에 JSON 형태로 데이터를 저장하여 처리속도가 빠르다는 장점이 있다.
Realm을 선택한 이유
현재까지 iOS 내에서 Realm, SQLite, FMDB와 같은 데이터베이스를 사용해 보았습니다. ( + CoreData )
(초기에는 FMDB를 이용해서 데이터베이스를 관리했었는데 SQLite를 Swift 환경에서 사용하기 쉽도록 만들어진 라이브러리라 그런지 기본 원리는 같아도 확실히 편의성에서는 SQLite보다 FMDB가 훨씬 좋았습니다.)
Realm은 비교적 최근에 사용하였는데, 이번 새로운 프로젝트에 내부 데이터베이스에서 대용량 데이터 관리가 필요하여 빠른 처리 속도를 보장(모바일에 특화된 No-SQL 데이터베이스이기 때문)할 수 있는 Realm을 선택하게 되었다.
주관적으로는 일단 참고할 문서나 자료가 다른 내부 데이터베이스들에 많아서 학습하기 편리하다는 점과 Codable을 사용해서 데이터 변환에도 수월하다고 생각된다.
Realm 사용법
기본적인 사용법들에 대해서는 공식 홈페이지를 참고하였습니다.
Entity
class Person: Object {
//기본키 지정
@Persisted(primaryKey: true)
var id: String = UUID().uuidString
@Persisted var name: String = ""
@Persisted var age: Int = 0
override init() {
super.init()
}
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
CRUD
기본적으로 Realm CRUD는 반드시 쓰기 트랜잭션(write transaction) Block 내에서 실행되어야 합니다.
//데이터베이스에 접근하기 위해 객체 생성
let realm = try! Realm()
//객체 생성
let person = Person(name: "hoon", age: 20)
//데이터베이스에 추가
try! realm.write {
realm.add(person)
}
//모든 객체 읽기
let persons = realm.objects(Person.self)
//정렬
let sorted = realm.objects(Person.self).sorted(byKeyPath: "name", ascending: false)
//조건을 통한 필터
let hoon = realm.objects(Person.self).where { $0.name == "hoon" }.first
//또는
let hoon = realm.objects(Person.self).where { $0.name.equals("hoon") }.first
//갱신
let person = persons[0]
try! realm.wirte {
//트랜잭션 내에서 변경하지 않을 경우 에러 발생
person.age = 24
}
//또는
try! realm.write {
let newPerson = Person(name: "hoon", age: 25)
//기본키를 조회하여 객체가 존재할 경우 업데이트
realm.add(newPerson, update: .modified)
}
//삭제
let delete = persons[0]
try! realm.write {
realm.delete(delete)
}
스레드 사용 시 주의
https://www.mongodb.com/ko-kr/docs/atlas/device-sdks/sdk/swift/crud/threading/
'iOS' 카테고리의 다른 글
[iOS] 오픈소스 라이선스 표시 및 라이브러리 (0) | 2024.12.04 |
---|---|
[iOS] SwiftGen 사용법 (1) | 2024.10.20 |