[android] 안드로이드 Room Database의 관계형 데이터베이스 사용법

안드로이드 앱에서 데이터를 효율적으로 관리하기 위해 관계형 데이터베이스를 사용하는 것은 매우 중요합니다. 안드로이드에서 관계형 데이터베이스를 구현하는 방법 중 하나는 Room 라이브러리를 사용하는 것입니다. Room은 SQLite 데이터베이스 위에 구축된 안드로이드 아키텍처 컴포넌트 라이브러리로, 간편한 인터페이스와 강력한 기능을 제공합니다.

Room Database 설정하기

Room 데이터베이스를 설정하려면 다음 단계를 따릅니다.

  1. 의존성 추가: 먼저 build.gradle 파일에 Room과 관련된 의존성을 추가해야 합니다.
implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"
  1. 데이터베이스 클래스: 데이터베이스를 나타내는 추상 클래스를 작성해야 합니다. 이 클래스에는 앱에서 사용할 데이터베이스와 연결된 모든 엔티티 및 데이터베이스 버전을 정의해야 합니다.
@Database(entities = arrayOf(User::class, Post::class), version = 1)
abstract class MyAppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
    abstract fun postDao(): PostDao
}
  1. 데이터 액세스 객체 및 엔티티 생성: 각 테이블의 데이터 액세스 객체(DAO)와 엔티티를 생성합니다.
@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "user_name") val userName: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>
    // 기타 메서드 정의
}

관계형 데이터베이스 사용하기

Room은 다양한 방법으로 데이터베이스 간의 관계를 정의하고 사용할 수 있습니다. 예를 들어, 부모-자식 관계, 일대다 관계 등을 지원하며, @Relation 어노테이션을 사용하여 관계형 데이터를 쉽게 쿼리할 수 있습니다.

data class UserWithPosts(
    @Embedded val user: User,
    @Relation(
        parentColumn = "uid",
        entityColumn = "user_id"
    )
    val posts: List<Post>
)

위 코드는 UserPost 테이블 간의 일대다 관계를 나타내며, UserPost를 함께 쿼리할 수 있도록 합니다.

안드로이드 Room Database의 관계형 데이터베이스 사용법을 익혔다면, 앱에서 데이터를 효율적으로 관리하고 쿼리할 수 있어 더 나은 사용자 경험을 제공할 수 있을 것입니다.

참고 자료