반응형
🔶 Repository와 MVVM에서 사용
이제 우리가 만든 Room DB를 실제적으로 사용할 수 있게 Repository를 만들어 봅시다. 이때 주의할 점은 Room DB가 메인 스레드에서 접근하려면 하면 에러가 납니다. 그래서 별도의 스레드를 사용해야 합니다. 그래서 비동기 처리를 위해 코루틴을 적용했습니다.
class UserRepository(application: Application) {
private val userDatabase = UserDatabase.getInstance(application)!!
private val userDao: UserDao = contactDatabase.userDao()
private val users: LiveData<List<User>> = userDao.getAll()
fun getAll(): LiveData<List<User>> {
return users
}
fun insert(user: User) {
try {
CoroutineScope(IO).launch {
userDao.insert(user)
})
} catch (e: Exception) { }
}
fun delete(user: User) {
try {
CoroutineScope(IO).launch {
userDao.delete(user)
})
} catch (e: Exception) { }
}
}
이제 만든 Repository를 MVVM 패턴에서 사용해 보자. ViewModel과 Activity를 만들어 줍니다.
UserViewModel.kt
class UserViewModel(application: Application) : AndroidViewModel(application) {
private val repository = UserRepository(application)
private val users = repository.getAll()
fun getAll() : LiveData<List<User>>{
return this.users
}
fun insert(user : User){
repository.insert(user)
}
fun delete(user : User){
repository.delete(user)
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var userViewModel: UserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
userViewModel = ViewModelProviders.of(this).get(UserViewModel::class.java)
userViewModel.getAll().observe(this, Observer<List<User>> { users ->
// Update UI
})
}
}
위와 같은 방식으로 Room을 적용해서 사용할 수 있습니다.
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Intent로 데이터 전달 시 용량 제한 (0) | 2021.09.16 |
---|---|
[Android] (번역) Comparing Kotlin Coroutines with Callbacks and RxJava (0) | 2021.08.20 |
[Android] 스마트폰 내장 DB를 사용하기 위한 Room 1탄 (0) | 2021.08.08 |
[Android] View Binding(뷰 바인딩) (0) | 2021.08.05 |
[Android] 디자인 패턴 (MVC, MVP, MVVM) (0) | 2021.08.03 |
댓글