MVVM + Retrofit + Repository의 전체적 구조
MVVM은 뷰 관련 로직이 ViewModel에 종속되는 패턴이다. 즉 UI 관련 데이터가 ViewModel에 있고 뷰는 이 뷰모델을 관찰(observing)하면서 변화하는 내용들을 업데이트한다.
ViewModel은 뷰에 사용되는 데이터를 요청하면, Repository는 Room (내부 Database) 혹은 Retrofit이 네트워크를 통해 통신한 내용을 ViewModel에 전달해주는 방식이다.
그래서 이 내용을 Retrofit을 통해 API 통신하는 부분에 적용하면 다음 절차로 진행된다!
1. 레트로핏 인터페이스를 생성하고, API를 통신한 결과를 response 모델로 반환하도록 해둔다.
2. 해당 인터페이스를 통해 데이터를 가져오는 부분은 Repositorty에 위임한다.
3. ViewModel과 Repository를 연결한다.
여기서부터 Coroutine에 관해서 짚고 넘어가자.
Android의 Kotlin Coroutine
코틀린 코루틴은 무엇인가?
Android의 비동기 프로그래밍을 간소화된 코드로 실행할 수 있도록 도와주는 동시 실행 설계 패턴이다.
코루틴은 Co + Routines을 합친 말로 여기서 Routine은 함수를 의미한다.
함수끼리 서로 협동하면서 비동기적인 프로그래밍이 가능하도록 돕는 프로그래밍이다.
주로 백그라운드에서 작업해야하는 태스크가 있을때 이를 비동기적으로 백그라운드에서 처리할 수 있도록 도와준다.
백그라운드에서 작업해야하는 태스크를 예를들자면 대표적으로 네트워킹이나 데이터베이스로부터 데이터를 얻어오는 것들이 있다.
함수에 붙는 suspend는 무엇인가?
코루틴은 메인 스레드에서 작업하다가 suspend가 붙은 함수를 만나면, 메인스레드의 다른 코드들을 실행하면서 해당 suspend 함수를 동시에 실행한다. suspend(중지하다) 라는 말이 붙은 이유는 해당 함수를 만나면 잠시 멈추고 해당 함수를 실행하기 때문에 언제든지 중지하거나 다시 실행(resume)할 수 있기때문에 붙은것이다. 따라서 코루틴 내의 함수에는 suspend가 붙어야한다.
Reference
https://developer.android.com/jetpack/guide?hl=ko
https://developer.android.com/kotlin/coroutines?hl=ko
'Android' 카테고리의 다른 글
[Android] Reactive Programming, Rxjava/Rxkotlin/RxAndroid이란? (0) | 2021.10.19 |
---|---|
[Android] MVVM, LiveData, ViewModel, Databinding 프로젝트에 적용 (0) | 2021.10.19 |
[Android] MVVM / LiveData, ViewModel, Databinding / AAC - 개념 (0) | 2021.10.15 |
[Android/Kotlin] 자주쓰는 Retrofit 인터페이스 정리 (0) | 2021.08.20 |
[Android/Kotlin] TabLayout & Viewpager2 (0) | 2021.08.20 |