간단하게 Paging에 대해서 알아보겠습니다.
구글 공식문서부터 한번 읽고 가볼까요?
페이징 라이브러리 개요
페이징 라이브러리를 사용하면 로컬 저장소에서나 네트워크를 통해 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있습니다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 모두 더 효율적으로 사용할 수 있습니다. 페이징 라이브러리의 구성요소는 권장 Android 앱 아키텍처에 맞게 설계되었으며 다른 Jetpack 구성요소와 원활하게 통합되고 최고 수준으로 Kotlin을 지원합니다.
"주목해봐야 할 것은 대규모 데이터를 처리할 수 있다" 정도인 것 같습니다.
자 그렇다면 조금 더 읽어볼까요?
페이징 라이브러리를 사용하여 얻을 수 있는 이점
페이징 라이브러리에는 다음과 같은 기능이 있습니다.
- 페이징된 데이터의 메모리 내 캐싱. 이렇게 하면 앱이 페이징 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있습니다.
- 요청 중복 제거 기능이 기본으로 제공되어 앱에서 네트워크 대역폭과 시스템 리소스를 효율적으로 사용할 수 있습니다.
- 사용자가 로드된 데이터의 끝까지 스크롤할 때 구성 가능한 RecyclerView 어댑터가 자동으로 데이터를 요청합니다.
- Kotlin 코루틴 및 Flow뿐만 아니라 LiveData 및 RxJava를 최고 수준으로 지원합니다.
- 새로고침 및 재시도 기능을 포함하여 오류 처리를 기본으로 지원합니다.
여러가지 이점이 있다고 나옵니다.
여기까지 읽었는데, 왜 쓰는지 감이 오시면 좋은데, 아직까지 왜 쓰는지에 대해서 감이 오지 않는 분들을 위해 아래의 비교 그림을 그려봤습니다.
기존 방식으로는 아래와 같이 한번에 API 콜을 했다면
Paging을 통해서 데이터를 분할해서 가져올 수 있습니다.
각자의 코드들을 한번 볼까요?
하나하나씩 살펴볼까요?
맨 오른쪽 UI 에서 PagingDataAdapter에서 ViewModel의 Pager를 호출하고 Flow Type으로 데이터를 받습니다.
중앙 ViewModel에서 Pager를 사용해서 PagingSource를 호출합니다. 얼마나 데이터를 호출할지 정해줍니다.
맨 왼쪽 Repository 에서 PagingSource/RemoteMediator를 이용해서 데이터를 호출해줍니다.
한번 코드로 한번씩 보겠습니다.
- 참조
https://developer.android.com/topic/libraries/architecture/paging/v3-overview?hl=ko
https://developer.android.com/codelabs/android-paging-basics?hl=ko#0
https://github.com/android/architecture-components-samples/tree/main/PagingSample
'Android Jetpack' 카테고리의 다른 글
Paging LV1 - 3 (Simple Ex) (0) | 2023.03.05 |
---|---|
Paging LV1 - 2 (Paging 소스 살펴보기) (0) | 2023.02.25 |
ROOM 외에 데이터 저장소에 대해서 알아보기 - 4 (Preference DataStore) (0) | 2023.02.12 |
ROOM 외에 데이터 저장소에 대해서 알아보기 - 3 (EncryptedSharedPreference Ex - 1) (0) | 2023.02.11 |
ROOM 외에 데이터 저장소에 대해서 알아보기(SharedPreference - 2) (0) | 2023.02.10 |