[kotlin] 코틀린에서 Room 라이브러리 연동하기

목차

Room 라이브러리란?

Room은 안드로이드에서 실제 데이터베이스를 사용하여 영속적인 데이터를 저장하기 위한 라이브러리입니다. Room은 SQLite의 간편한 추상화를 제공하며, 데이터베이스에 접근하고 조작하는 과정을 단순화합니다.

Room 라이브러리 추가

프로젝트의 build.gradle 파일에 다음 의존성을 추가하여 Room 라이브러리를 사용할 수 있습니다.

dependencies {
    implementation "androidx.room:room-runtime:2.3.0"
    kapt "androidx.room:room-compiler:2.3.0"
}

데이터베이스 생성

Room의 핵심 구성 요소는 데이터베이스입니다. 데이터베이스는 RoomDatabase 클래스를 상속받아 구현합니다.

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Entity 클래스 생성

Entity 클래스는 데이터베이스의 테이블을 나타내는 클래스입니다. @Entity 어노테이션을 사용하여 해당 클래스를 Entity로 지정합니다.

@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val age: Int
)

DAO 클래스 생성

DAO(Data Access Object)는 데이터베이스에 접근하기 위한 메서드를 포함하는 인터페이스입니다. DAO는 @Dao 어노테이션을 사용하여 해당 인터페이스를 DAO로 지정합니다.

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): List<User>

    @Insert
    fun insert(user: User)

    @Delete
    fun delete(user: User)
}

Room 데이터베이스 사용

데이터베이스 인스턴스를 생성하고 DAO를 사용하여 데이터베이스에 접근하고 조작할 수 있습니다.

val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "my-database")
    .build()

val userDao = db.userDao()

val users = userDao.getAll()

위의 코드에서는 데이터베이스를 생성하기 위해 databaseBuilder 메서드를 사용하고, 생성된 데이터베이스에서 userDao를 가져와서 사용합니다. userDao에서는 getAll() 메서드를 호출하여 모든 사용자를 가져올 수 있습니다.

이와 같은 방식으로 코틀린에서 Room 라이브러리를 사용하여 데이터베이스를 연동할 수 있습니다.

참고 자료