
이번에 혼자 플젝을 하면서 Room을 도입하였습니다. 제가 참고한 프로젝트는 android에서 제공하는 sunflower 입니다. 원래는 realm을 도입하려고 했는데 다른 회사 구인 구직을 보다가 보니 room을 이용하는 곳들이 많은 듯 해서 이쪽을 우선으로 보게 되었습니다. 이전에 저는 SQLite를 사용하여 직접 데이터를 저장하는 방식으로 진행하였습니다. 쿼리를 직접 String으로 쓴 후에 데이터를 재조합 하여야 하는 등 후 작업이 많았는데요. ROOM은 그런 번거로운 과정을 줄이기 위해 다음과 같은 제공하고 있습니다
가장 기본적으로 gradle에 추가하여야 하는 부분은 다음과 같습니다
dependencies {
	implementation("androidx.room:room-ktx:2.4.3")
    kapt("androidx.room:room-compiler:2.4.3")
}이외에도 optional 로 기능을 추가하여 사용할 수 있기때문에 사이트를 참고하시면
부가 기능을 더 추가하여 사용할 수 있습니다

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}@Database 주석을 단 entities 배열을 포함해야 합니다enableMultiInstanceInvalidation()를 포함하여 공유 데이터베이스 파일을 무효화 할 수 있으며다른 프로세스내의 appDatabase인스턴스로 자동 전파되게 할 수 있습니다@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)@Entity주석이 달린 클래스로 정의해야 합니다@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>
    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>
    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User
    @Insert
    fun insertAll(vararg users: User)
    @Delete
    fun delete(user: User)
}		val db = Room.databaseBuilder(
            applicationContext,
            AppDatabase::class.java, "database-name"
        ).build()AppDatabase의 추상 메서드로 DAO를 가져와서 데이터 베이스와 상호 작용 할 수 있습니다.
val userDao = db.userDao()
val users: List<User> = userDao.getAll()