-
[안드로이드] 내장 DB로 Realm 사용하기안드로이드 2020. 6. 1. 19:23
슥삭을 개발하면서 내장 DB를 써야 할 일이 생겼다. 아니 사실은 그 전부터 쓸 일은 많았는데, 미루고 미루다가 드디어 적용했다!
안드로이드에서 사용할 수 있는 내장 DB의 종류는 꽤 많은데, 내가 Realm을 선택한 이유는 정말 간단하다.
✨Realm을 선택한 이유 ✨
- 데이터를 객체 형태로 저장한다. (쿼리문 싫어,,,)
- 커뮤니티가 활발하다. (구글링 열심히 하자!)
자 이제 realm을 사용해보자.
0. 설치하기
아래 코드를 프로젝트 수준 build.gradle에 추가한다.
buildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:3.5.0" } }
다음 코드를 애플리케이션 수준 build.gradle에 추가한다.
apply plugin: 'realm-android' anroid { realm { syncEnabled = true } }
이렇게 두개만 추가하면 realm 설치 끝 ❗️
1. Realm 초기화하기
Realm.init()으로 Realm을 초기화할 수 있다.
초기화는 realm을 사용하고자 하는 Activity에서 해도 되지만, 한번만 초기화하면 되므로 Application 클래스에서 초기화를 해주었다.
class SsgSagApplication : Application(){ override fun onCreate(){ super.onCreate() Realm.init(this) val config : RealmConfiguration = RealmConfiguration.Builder() .name("appdb.realm") // 생성할 realm 파일 이름 지정 .deleteRealmIfMigrationNeeded() .build() Realm.setDefaultConfiguration(config) }
🚫 해당 Application class는 manifests에 꼭 등록해주어야한다 ! 🚫
2. Model 만들기
데이터를 저장하는 Realm 모델 클래스는 RealmObject 를 상속받아서 생성해야한다.
앱을 깔고 로그인한 뒤 한번 저장된 후 바뀔일이 크게 없는 device 정보를 내장 DB에 저장해놓으려 한다.
이를 위해 아래와 같은 class를 만들었다.
open class DeviceInfo : RealmObject(){ var id : Int = 0 var token ="" var loginType: Int = 0 var uuid ="" }
👉Realm의 모델에 관한 다양한 정보를 더 얻고 싶다면 아래의 링크에 들어가보자.
https://realm.io/kr/docs/java/latest/#models
3. Realm 가져오기
이제 Realm을 사용하고 싶은 곳에서 Realm을 가져와서 사용할 수 있다.
lateinit var realm : Realm override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) realm = Realm.getDefaultInstance() }
원하는 값은 메소드를 이용해서 가져올 수 있다.
val realmDeviceInfo = realm.where(DeviceInfo::class.java).equalTo("id", 1 as Int).findFirst()
👉 DeviceInfo 클래스에서 id가 1인 첫번째 데이터를 가져와서 realmDeviceInfo에 저장한다.
4. Realm에 데이터 저장하기
데이터 저장은 꼭! 트랜잭션 안에서 이루어져야 한다.
fun setDeviceInfoUuid(uuid : String){ // 트랜잭션 시작 realm.beginTransaction() // id가 1인 DeviceInfo를 가져온다. val realmDeviceInfo = realm.where(DeviceInfo::class.java).equalTo("id", 1 as Int).findFirst() // id가 1인 DeviceInfo 객체가 이미 존재한다면 if(realmDeviceInfo != null){ // 그 객체의 uuid값 초기화 realmDeviceInfo.uuid = uuid }else{ // id가 1인 DeviceInfo 객체가 존재하지 않는다면 // 객체를 새로 생성 val realmObject = realm.createObject(DeviceInfo::class.java) realmObject.apply{ this.id = 1 this.uuid = uuid } } // 트랜잭션 종료 realm.commitTransaction() }
위 코드에서 이미 존재하는 객체의 값을 수정하는 것과 객체를 새로 만드는 경우를 모두 볼 수 있다.
간단하게 Realm 사용법을 알아보았다!
'내장 DB'를 딱 들으면 왠지 어려울 것 같아서 미루다가 꼭 필요해져서 사용해보았는데, 생각한 것 보다 쉽게 사용할 수 있는 것 같다.
물론 위에서 본 것 처럼 트랜잭션 때문에 멀티스레딩을 하기 까다롭다는 단점이 있긴하지만, 간단하게 사용하려면 쉽게 접근할 수 있고 한국어로 사용법이 친절하게 나와있다는 장점 때문에 사용해볼만 한 것 같다!
곧 다른 프로젝트를 사용해보려고 하는데, 거기서는 다른 걸 써보고 한번 비교해봐야지 😊
'안드로이드' 카테고리의 다른 글
안드로이드 프로젝트에 RxJava 적용하기 (1) 2020.04.12 '슥삭'의 아키텍쳐 (1) MVVM 디자인패턴 (0) 2020.03.11 코틀린을 코틀린답게 사용하는 법 - (4) 표준 라이브러리 (0) 2020.03.11 코틀린을 코틀린답게 사용하는 법 - (3) (0) 2020.03.08 코틀린을 코틀린답게 사용하는 법 - (2) (1) 2020.03.03