안드로이드 프로젝트를 진행하면서 로컬에 데이터를 저장하기 위해 어떤 DB를 사용해야 할지 고민이 많았습니다.
안드로이드에서 데이터를 저장하는 방식에는 여러가지가 있습니다.
1. SharedPreferences
2. Room
3. Realm
➡️ 이렇게 여러 방식을 찾아보고 비교해보면서, 최종적으로는 Realm을 선택하게 되었습니다.
우선, SharedPreference는 자동 로그인 여부와 같은 간단한 값을 저장할 때엔 적합하지만, 저장할 데이터의 양이 많고 간단하지 않은 경우에는 적합하지 않다는 생각이 들었습니다.
Room과 Realm 사이에서 고민이 많았지만, iOS 개발자 분과 모델 객체를 같이 짜고 구성할 수 있어 협업에 좀 더 편리할 것 같아 Realm을 선택하게 되었습니다.
데이터 컨테이너 모델을 사용해 직접 객체를 데이터베이스에 저장하는 방식이기 때문에 저장, 불러오기와 같은 동작들도 좀 더 빠르게 처리할 수 있습니다.
plugins {
id "realm-android" // 가장 하단에 위치시키기
}
dependencies {
classpath 'io.realm:realm-gradle-plugin:10.8.0'
// 최신 버전은 realm 릴리즈 노트 확인
}
realm 초기화는 앱을 실행하는 동안 한 번만 하면 되므로 Application class에서 해주는 것이 좋습니다.
class OffoffApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
// Realm 초기화
Realm.init(this)
val config : RealmConfiguration = RealmConfiguration.Builder()
.allowWritesOnUiThread(true)
.name("user.realm") // 생성할 realm db 이름
.deleteRealmIfMigrationNeeded()
.build()
Realm.setDefaultConfiguration(config)
}
}
open class User (
@PrimaryKey
var id: Int? = 0,
var name: String? = null,
var age: Int? = 0,
) : RealmObject()
realm을 사용할 곳에서 realm 인스턴스를 가져와 사용할 수 있습니다.
val realm = Realm.getDefaultInstance()
Create, Update - 데이터 저장 또는 갱신하기
// 사용자 저장 또는 갱신하기
fun insert(user: User) {
realm.executeTransactionAsync {
it.insertOrUpdate(user)
}
}
Read - 데이터 읽기
// 모든 사용자 읽어오기
fun getAllUser(): RealmResults<User> {
return realm.where<User>()
.findAll()
.sort("id", Sort.ASCENDING)
}
// 특정 사용자 읽어오기
fun getUser(id: Int): User? = realm.where<User>()
.equalTo("id", id)
.findFirst()
Delete - 데이터 삭제하기
// 모든 사용자 삭제
fun deleteAllUser() {
realm.executeTransaction {
it.where<User>().findAll().deleteAllFromRealm()
}
}
// 특정 사용자 삭제
fun deleteUser(id: Int) {
realm.executeTransaction {
it.where<User>().equalTo("id", id).findAll().deleteAllFromRealm()
}
}
간단하게 안드로이드에서의 Realm 사용 방법을 알아보았습니다. 처음 접해보는 것이다 보니 초반에 Realm과 정을 붙이는 데 조금 힘들었지만 지금은 훨씬 익숙해진 것 같아 뿌듯합니다 :)
참고:
https://developer.android.com/training/data-storage/room
https://docs.mongodb.com/realm-legacy/docs/kotlin/latest/index.html
https://github.com/realm/realm-kotlin
I really like posts like this dynamons world Brings me a lot of interesting things.
I like using Realm Database because it is a reactive, object-oriented, cross-platform, mobile database. capybara clicker
Great blog, thank you for sharing such new contexto game and useful information. fall guys
This complicates your problem, especially ETECHUPS
when you are running out of letters to try from Some words may be repeated.
You re in point of fact a just right webmaster. The website loading speed is amazing. It kind of feels that you're doing any distinctive trick. Moreover, The contents are masterpiece. you have done a fantastic activity on this subject cookie clicker
당신은 여기까지 왔고 훌륭하다고 생각합니다. 계속해서 꿈을 쫓으면 언젠가는 정상에 도달할 것이고 그러면 당신이 얼마나 훌륭해졌는지 알게 될 것입니다. pge outage map
Storing a small amount of raw data as an XML file inside a geometry dash bloodbath application is what I usually use
이 포스트를 보고 저도 모르는 사이에 Realm을 마스터하게 되었어요..!!!!