[kotlin] 룸 데이터베이스 동작 방식

안녕하세요! 오늘은 안드로이드 앱에서 SQLite 데이터베이스를 사용하는 방법 중 하나인 룸(Room) 라이브러리에 대해 알아보겠습니다. 룸은 SQLite 데이터베이스를 더 쉽게 사용할 수 있도록 도와주는 라이브러리로, 데이터베이스의 스키마 변경, 쿼리 실행, 데이터베이스 연결 관리 등을 단순화하는 기능을 제공합니다.

룸의 핵심 구성 요소

룸 라이브러리는 세 가지 주요 구성 요소를 가지고 있습니다: Entity, DAO(데이터 액세스 객체), Database.

Entity

Entity는 데이터베이스 테이블을 나타내는 클래스입니다. 이 클래스는 @Entity 어노테이션을 사용하여 데이터베이스 테이블로 선언됩니다. 또한, 각 열은 클래스의 속성으로 표현되며, 각 속성은 @ColumnInfo 어노테이션을 사용하여 테이블의 열로 선언됩니다.

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "user_name") val userName: String
)

DAO

DAO는 데이터베이스에 액세스하기 위한 메서드를 포함하고 있는 인터페이스입니다. 각 메서드는 SQL 쿼리 형태로 정의되며, 룸 라이브러리는 이를 사용하여 실제 데이터베이스 액세스를 처리합니다.

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

    @Insert
    fun insert(user: User)
}

Database

Database는 데이터베이스에 대한 인터페이스를 정의하는 추상 클래스입니다. 이러한 클래스는 @Database 어노테이션을 사용하여 데이터베이스로 선언됩니다. 또한, 해당 클래스는 앱에서 사용할 데이터베이스 인스턴스를 나타내는 싱글톤 인스턴스를 가집니다.

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

룸의 동작 방식

데이터베이스에 액세스하기 위해선 일반적으로 다음과 같은 단계를 거칩니다.

  1. 룸 데이터베이스를 초기화합니다.
  2. DAO 인터페이스를 사용하여 데이터베이스 작업을 수행합니다.
  3. 데이터베이스 트랜잭션을 처리합니다.

룸 라이브러리를 사용하면 이러한 데이터베이스 액세스 과정을 더욱 쉽고 효율적으로 처리할 수 있습니다.

룸 데이터베이스에 대한 기본 동작 방식과 주요 구성 요소에 대해 알아보았습니다. 룸은 안드로이드 앱에서 데이터베이스 연동을 위해 매우 유용한 도구로, 간단한 코드와 구조적인 기능을 통해 개발자들이 데이터베이스 액세스를 보다 쉽게 할 수 있도록 도와줍니다.

더 많은 정보와 상세한 사용 방법은 룸 공식 문서를 참고하시기 바랍니다.