[kotlin] 안드로이드 뷰모델과 데이터베이스 연동하기

안드로이드 앱에서 데이터베이스를 사용하여 데이터를 저장 및 관리하고, 뷰모델을 사용하여 UI와 데이터베이스 간의 통합을 관리할 수 있습니다. 이번 포스트에서는 안드로이드 앱에서 뷰모델과 데이터베이스를 어떻게 연동하는지 알아보겠습니다.

1. 데이터베이스 설정

안드로이드 앱에서는 Room 라이브러리를 사용하여 SQLite 데이터베이스를 다룰 수 있습니다. Room은 데이터베이스의 데이터 접근 객체(DAO), 데이터베이스를 위한 엔티티, 데이터베이스와 관련된 설정을 포함하는 데이터베이스 객체를 제공합니다.

Room 라이브러리 추가

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

위의 의존성을 build.gradle 파일에 추가하여 Room 라이브러리를 프로젝트에 포함시킵니다.

2. 데이터베이스 엔티티 및 DAO 설정

다음으로, 데이터베이스의 테이블을 정의하는 엔티티와 데이터에 접근하는 메서드를 정의하는 DAO(Data Access Object)를 설정해야 합니다.

엔티티 클래스 예시

@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

DAO 인터페이스 예시

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

    @Insert
    fun insert(user: User)
}

3. 뷰모델 설정

뷰모델은 UI 관련 데이터를 관리하고, 활동 및 프래그먼트의 구성 변경과 같은 수명 주기 이벤트를 처리합니다.

뷰모델 클래스 작성

class UserViewModel(private val userDao: UserDao) : ViewModel() {
    val allUsers: LiveData<List<User>> = userDao.getAll().asLiveData()
}

4. 데이터베이스와 뷰모델 통합

마지막으로, 데이터베이스와 뷰모델을 통합하여 UI에서 데이터를 효과적으로 관리할 수 있습니다.

class MainActivity : AppCompatActivity() {

    private lateinit var userViewModel: UserViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val userDao = AppDatabase.getDatabase(this).userDao()
        userViewModel = UserViewModel(userDao)

        userViewModel.allUsers.observe(this, { users ->
            // UI 업데이트
        })
    }
}

결론

안드로이드 뷰모델과 데이터베이스를 연동하여 데이터 관리 및 UI 업데이트를 효율적으로 수행할 수 있습니다. 뷰모델을 사용하여 데이터베이스와의 통합을 구성하면 UI 코드가 간단해지고, 유지보수가 편리해집니다.

참고: Room 라이브러리 공식 문서