[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 라이브러리 공식 문서