android, realm 초간단 정리
목차
대체 저의 커리어가 어떻게 돼가는것인지 잘 모르겠습니다만..
최근에 안드로이드 공부를 시작했습니다.
안드로이드 앱을 만들때면 거의 필수적으로 앱 내장 DB를 사용해야 합니다.
이때 sqlite 같은 기본 솔루션을 쓸 수도 있겠지만 좀 더 쉬운 툴이 있으면 그것을 써야겠죠.
쉽게 설명하자면 안드로이드 내장DB에서 사용되는 ORM 이라고 보시면 됩니다.
java, spring 을 잘 아시는 서버개발자 분들께서는 JPA가 생각나실겁니다.
공식 홈페이지의 설명에 따르면..
Realm DB로 모바일앱 데이터 저장을 뚝딱뚝딱 만들수 있고,
자바, 스위프트, 오브젝티브C, 자바스크립트 등등에서 쓸 수 있대네요
Realm 공식 사이트의 설명
사용법
거두절미하고 어떻게 사용하는지 아주 간략히 정리하겠습니다.1
2
3
4
5
6
7
8dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
...
...
classpath "io.realm:realm-gradle-plugin:5.2.0"
}
프로젝트 레벨의 build.gradle 파일에 realm 관련 플러그인을 넣어 봅시다.
1 | apply plugin: 'com.android.application' |
다음은 app 레벨의 build.gradle 인데요. 위와같이 realm-android를 추가해줍시다.
그 후 android studio 메뉴 중 File - Re-Import Gradle Project
를 눌러줍시다.
저는 어떤 비디오를 “좋아요” 하는 객체를 저장한다는 가정을 세웠습니다.
따라서 Like 클래스를 아래와 같이 만들었습니다. (kotlin 이에요)
1 | import io.realm.RealmObject |
필요한 필드들을 constructor 에 선언해 주었습니다.
특별한것은 PK로 사용할 필드를 @PrimaryKey
어노테이션으로 마킹한 것과RealmObject
클래스를 상속받았다는 점 입니다.
1 | class MainActivity : AppCompatActivity() { |
그리고 Realm.init을 해줘야하는데요 전 그냥 메인이되는 액티비티에다가 넣어줬습니다.
onDestroy 안에다가 close 하는것도 넣어줍시다.
1 | addButton.setOnClickListener { |
액티비티나 프래그먼트에서 getDefaultInstance를 통해 수행 객체를 들고옵니다.
그 후 위처럼 트랜잭션을 열고, 데이터를 설정하고, 트랜잭션을 커밋하면 끝입니다.
정말 안타까운 점은 PK에 Auto-Increment 속성을 걸 수 없는것 이었습니다.
따라서 위처럼 마지막 id를 가져와서 +1을 해주는 작업을 해줘야 합니다.
(진짜 없는것인지 아닌진 모르겠습니다. 문서를 아직 다 안읽어봤거든요)
1 | val all = realm.where(Like::class.java).findAll() |
잘 들어갔는지 확인할 때는 위처럼 findAll 메소드를 이용하면 됩니다.
마치며
사실 전 서버 개발자라서 이렇게 하는게 정답인가는 잘 모르겠습니다.
좀 내용이 부실하다는 생각이 들긴 하지만 기본은 이정도 인것 같네요.
이제 realm 객체를 통해 어떤 쿼리를 날릴것인지 공식 문서나 많은 예제들을 통해 학습하면 되겠습니다.