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의 사용이 가능해진다.