[kotlin] MVVM 아키텍처에서의 데이터베이스 처리 방법

MVVM(MVVM) 아키텍처는 Model-View-ViewModel을 나타내는 디자인 패턴으로, 안드로이드 앱 개발에 널리 사용됩니다. 이 아키텍처에서 데이터베이스 처리는 중요한 부분이며, 이를 효율적으로 수행하기 위해 몇 가지 접근 방법이 있습니다.

1. Room 라이브러리 사용

Room은 안드로이드에서 SQLite 데이터베이스를 더 쉽게 사용할 수 있도록 도와주는 라이브러리입니다. MVVM 아키텍처에서 Room을 사용하면 ViewModel이 Repository를 통해 데이터베이스와 상호작용할 수 있습니다. Repository는 데이터를 가져오고 변경하는 데 필요한 쿼리를 수행하며, 변경 사항을 ViewModel로 보냅니다.

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

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

    @Insert
    fun insertAll(vararg users: User)
}

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

2. RxJava 또는 Kotlin Coroutines을 사용한 비동기 처리

데이터베이스 작업은 일반적으로 비동기적으로 수행되어야 합니다. RxJava 또는 Kotlin Coroutines를 사용하여 비동기 처리를 구현할 수 있습니다. ViewModel에서 비동기적으로 데이터베이스 작업을 수행하고, 작업이 완료되면 UI에 결과를 업데이트할 수 있습니다.

class MyViewModel(private val userRepository: UserRepository) : ViewModel() {
   
   fun getUsers() {
       viewModelScope.launch {
           val users = userRepository.getUsers()
           // UI 업데이트
       }
   }
}

MVVM 아키텍처에서는 데이터베이스 처리가 ViewModel에서 직접 이루어지지 않고, Repository를 통해 처리됩니다. 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.

따라서 안드로이드 앱을 개발할 때 MVVM 아키텍처와 Room 라이브러리, RxJava 또는 Kotlin Coroutines를 사용하여 데이터베이스 처리를 수행하는 것이 좋은 선택일 수 있습니다.

참고 자료