안드로이드 Realm DB 사용하기
28 May 2019 | android programming thread handlerAndroid Realem 사용하기
Realm 데이터베이스란?
Relam사에서 만든 Mobile Databas이다. SQLite 다음으로 많이 사용된다.
Realm은 속도가 빠르고 사용성이 편하다고 주장한다.
Realm의 단점?
다중 쓰레드에서 Realm의 객체를 관리하기 힘들다. Realm 객체는 쓰레드 간 직접 전달이 불가능하다.
Realm 사용 예제
각 예제는 코틀린언어로 작성되어 있습니다.
1. 라이브러리 설정
안드로이드 프로젝트는 두개의 Project의 build.gradle과 App레벨의 build.gradle을 가지고 있다. 이 두가지 파일에 다음 설정을 해주어야 한다.
top-level build.gradle
buildscript { ext.kotlin_version = '1.3.31' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'io.realm:realm-gradle-plugin:5.2.0' } }
app-level build.gradle
apply plugin: 'realm-android'
2. 모델 생성
RealmObject 객체를 상속받는다.
class BirdInfo : RealmObject() { var name: String = "" var level: Int = 0 var hp = 100 var happy = 100 var angry = 100 }
3. Realm 초기화 및 객체생성
Realm.init(this) realm = Realm.getDefaultInstance()
4. Realm 객체 이용해 트랜잭션 하고 Query 하기
beginTransaction을 시작하고 commitTransaction으로 끝내며, 사이에서 데이터와 관련된 작업을 실행한다.
class BirdInfoRepository { fun getBirdInfo(context: Context): BirdInfo? { val ranContext = context.applicationContext as RanApplication val realm = ranContext.realm realm.beginTransaction() val info = realm.where(BirdInfo::class.java).findFirst() realm.commitTransaction() return info } fun createBirdInfo(context: Context) : BirdInfo?{ val ranContext = context.applicationContext as RanApplication val realm = ranContext.realm realm.beginTransaction() val birdInfo = realm.createObject(BirdInfo::class.java) realm.commitTransaction() return birdInfo } fun updateBirdInfo(context: Context, birdInfo: BirdInfo) { val ranContext = context.applicationContext as RanApplication val realm = ranContext.realm realm.beginTransaction() val info = realm.where(BirdInfo::class.java).findFirst() info!!.name = birdInfo.name info.angry = birdInfo.angry info.happy = birdInfo.happy info.hp = birdInfo.hp info.level = birdInfo.level realm.commitTransaction() } }