본문 바로가기

안드로이드

Android Room

반응형

혹시 Android 개발할 때 Room을 못들어보신 분은 없죠?

 

Jetpack이 제공하는 데이터베이스 아키텍처(database architecture)입니다.

 

[Android Developer Document]

developer.android.com/training/data-storage/room?hl=ko

 

Room을 사용하여 로컬 데이터베이스에 데이터 저장  |  Android 개발자  |  Android Developers

Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기

developer.android.com

가이드는 공식가이드를 한번씩 읽어보시는게 좋겠습니다.

 

SQLite는 모두 아시죠?

Android 내장 데이터베이스! 안드로이드 입문서에도 적혀있으니 모르는 분 없을 것이라고 생각듭니다.

Room은 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQL을 완벽히 활용한다고 합니다.

 

Room은 필수가 아니라 선택적으로 사용하는 것입니다. SQLite API를 직접적으로 사용하길 원하신다면 그렇게 하셔도 됩니다.

 

developer.android.com/images/training/data-storage/room_architecture.png?hl=ko

위의 이미지처럼 Room을 하기 위해선 총 3가지의 동작이 필요합니다.

1. Table 역할을 하는 Entity를 만들것

2. 쿼리문이 모여있는 DAO를 만들것 (Data Access Object)

3. 실질적으로 데이터베이스 인스턴스를 만드는 RoomDatabase()를 databaseBuilder를 통해서 만들것!

 

Room(룸)을 사용하시다 보면 데이터베이스 이전(Migration) 이 필요할 때가 있습니다.

 

원래는 Entity의 데이터 변경이 있을때 버전을 올려줘야하죠.

근데 fallbackToDestructiveMigration를 옵션으로 줄경우 Migration 정의를 하지 않아도 되지만 생성된 데이터베이스를 삭제한 후 새로운 데이터 베이스를 생성하게 됩니다.

마이그레이션이 굳이 중요하지 않을때 사용하면 편하겠죠.

Room에서 TypeConvert란?

Room은 primitive type과 그 wrapping 타입만 지원한다. 그 외의 type을 사용할 경우 TypeConverter를 사용하여 치환해야 한다.

@TypeConverter
    @JvmStatic
    fun stringToIntList(data: String?): List<Int>? {
        return data?.let {
            it.split(",").map {
                try {
                    it.toInt()
                } catch (ex: NumberFormatException) {
                    Timber.e(ex, "Cannot convert $it to number")
                    null
                }
            }
        }?.filterNotNull()
    }

위 코드에서 보면 String 데이터를 split 해서 list로 치환하고 있다.
DB로 저장할땐 List<Int> 타입으로 치환하여 바꾸기 때문이다. 해당 클래스를 사용하기 위해서는

@TypeConverters(GithubTypeConverters::class)

이런식으로 database에 설정해주면 된다.

 

 

Room에서 List 사용하기 #Kotlin #TypeConverter #Android

Room에서 다음과 같이 선언하면 그냥 쓸 수 있을 줄 알았다. @ColumnInfo(name = "word_list") var wordList: List ?= null 하지만 다음과 같이 선언하고 build를 시작하면 error가 뜬다. 에러내용은 "typerConver..

jinsangjin.tistory.com

tourspace.tistory.com/28

반응형