Android/Skill

Android(kotlin) Room DB 사용법

KwakEuiJin 2023. 1. 2. 14:30

 

Room DB란 이전 안드로이드에서 쓰던 SQLite를 anotation을 통해 보다 쉽게 DataBase에 접근 할 수 있는 Skill이다. 

크게 데이터베이스 클래스, 데이터 클래스, DAO로 이루어져있다.

 

 

오늘 포스팅에서는 간단하게 Database를 초기화하고 해당 instance를 NonNull하게 반환하는 방법에 대해서 포스팅하겠다. 

 

@Database(entities = [Word::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun wordDao():WordDao

    companion object {
        private var appDatabase: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return appDatabase ?: synchronized(this) {
                val newAppDatabase = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, "app-database.db").build()
                appDatabase = newAppDatabase
                newAppDatabase
            }
        }
    }
}

 

위 코드처럼 companion object내에 싱글톤으로 RoomDatabase를 생성해준다. 이 때 파라메터로 들어가는 context를 applicationContext type 으로 변경해주는 것이 좋다. 그 이유로 context가 접근 가능한 여러 클래스에서 사용 될 위험성이 있기 때문이다. 큰 문제는 없기에 위 코드로 진행하였다.

 

 

class Application: Application() {

    companion object {
        lateinit var database:AppDatabase
    }

    override fun onCreate() {
        super.onCreate()
        database = AppDatabase.getInstance(this)
    }
}

 

그 후 Application의 onCreate단에서 해당 인스턴스를 반환해준 후 여기서도 싱글톤으로 전체 클래스에서 쓰일 database를 병시하여 NonNull한 방식의 Room database의 사용이 가능해진다.