Realm이란?
- Realm은 https://realm.io에서 오픈소스로 만들어지고 있는 로컬 데이터베이스이다.
- Realm은 자바 객체를 해석해 그 객체의 데이터를 그대로 데이터베이스에 저장, 획득한다.
- Realm이 ORM을 제공한다는 것이 SQLite와 비교했을 때 가장 큰 차이이다.
- Realm은 안드로이드뿐만 아니라 다양한 곳에서 데이터베이스로 사용된다.
- 표준 라이브러리가 아니므로 플러그인 방식으로 이용해야 함
Realm를 사용해서 안드로이드 앱에서 데이터를 저장하기, 가져오기, 삭제하기에 대해 다뤄보겠습니다.
Realm 플러그인 설치를 위한 의존성 설정
build.gradle(project)
5.6.0 버전으로 빌드하고 앱 실행 시 에러가 발생했습니다.
하위 버전과 관련된 이슈가 있습니다.
buildscript {
dependencies {
classpath "io.realm:realm-gradle-plugin:6.1.0"
}
}
build.gradle (Module)
kotlin-kapt를 설치 안하면 Configuration with name 'kapt' not found 오류가 발생합니다.
plugins {
id 'kotlin-kapt'
id 'realm-android'
}
Value-Object 클래스 만들기
VO 객체의 변수 데이터를 Realm이 자동 해석해 데이터를 저장하거나, 저장된 데이터로 객체를 만들어 줍니다.
class MemoVO: RealmObject() {
val title;
val content;
}
데이터 저장하기
Realm을 실행하려면 Realm.Transaction 인터페이스를 구현한 클래스를 만들어 줘야 합니다.
이 클래스의 객체를 executeTransaction() 함수의 매개변수로 주면 execute() 함수가 자동 실행되는 구조입니다.
// Realm 객체만들기
Realm.init(this)
val mRealm = Realm.getDefaultInstance()
// 메모 데이터 저장하기
mRealm.executeTransaction { realm ->
val vo: MemoVO = realm.createObject(
MemoVO::class.java)
vo.title = title
vo.content = content
}
데이터 가져오기
findFrist를 통해 데이터를 가져옵니다.
title 값에 부합하는 데이터를 MemoVO 객체의 변수에 세팅합니다.
val mRealm = Realm.getDefaultInstance()
val vo = mRealm.where(MemoVO::class.java).equalTo("title", title).findFirst()
mRealm.where(MemoVO::class.java)을 통해 반환되는 객체는 RealmQuery이며, 이 객체에서 데이터를 획득하기 위한 다양한 findXXX 함수를 제공합니다.
- findAll()
- findAllSorted(String fieldName)
- findAllSorted(String[] fieldNames, Sort[] sortOrders)
- findAllSorted(String fieldName, Sort sortOrder)
- findAllSorted(String fieldName1, Sort sortOrder1, String fieldName2, Sort sortOrder2)
- findFirst()
조건을 명시할 때 equalTo( ) 함수 이외에 between( ), beginsWith( ), endsWith( ), isNotNull( ), in( ), isNull( ), lessThan ( ), lessThanOrEqualTo( ), contains(), like( ) 등의 다양한 함수를 제공합니다.
데이터 삭제
val mRealm = Realm.getDefaultInstance()
val vo = mRealm.where(MemoVO::class.java).equalTo("title", "hello").findFirst()
vo.deleteFromRealm()
모든 데이터 삭제
mRealm.delete(MemoVO.class)
'Android > 개념 및 예제' 카테고리의 다른 글
안드로이드 데이터 및 파일 저장소 개요 및 내부 저장소 사용하기 (0) | 2021.05.18 |
---|---|
안드로이드 퍼미션 개념 정리 (0) | 2021.05.18 |
Android SQLite를 사용하여 데이터를 저장하기 (0) | 2021.05.14 |
안드로이드 앱 개발의 특징 및 디렉터리 구조 (0) | 2021.05.14 |
[Kotlin] Recyclerview click Event (람다 함수 사용) (0) | 2021.02.16 |