Jetpack Paging3 - 1. 기본개념 알아보기
⚜️ Paging3 개요
Paging의 의미와 Jetpack Paging3 라이브러리 사용시 이점을 간단하게 알아봅니다.
Paging의 의미와 Jetpack Paging3 라이브러리 사용시 이점을 간단하게 알아봅니다.
Paging
은 데이터를 로딩할 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 Chunk(덩어리)
단위로 나눠 가져오는 것을 의미합니다.
위처럼 Jetpack 에서 제공하는 Paging3
라이브러리는 데이터를 작은 Chunk 단위로 로드하여 표시할 수 있도록 제공합니다. 따라서, 데이터 전체가 아닌 일부를 요청에 따라 Request하게 되면 통신에 사용되는 네트워크 대역폭 뿐만 아니라 시스템의 Resource 사용량을 줄일 수 있는 이점이 있습니다.
Android Developers 공식 문서에서 Paging3 라이브러리를 적용했을 때 얻을 수 있는 이점에 대해 자세하게 설명하고 있습니다.
Paging3 라이브러리를 사용하기 위해서는 아래와 같이 의존성을 추가해야 합니다.
dependencies {
def paging_version = "3.1.0"
implementation "androidx.paging:paging-runtime:$paging_version"
// alternatively - without Android dependencies for tests
testImplementation "androidx.paging:paging-common:$paging_version"
// optional - RxJava2 support
implementation "androidx.paging:paging-rxjava2:$paging_version"
// optional - RxJava3 support
implementation "androidx.paging:paging-rxjava3:$paging_version"
// optional - Guava ListenableFuture support
implementation "androidx.paging:paging-guava:$paging_version"
// optional - Jetpack Compose integration
implementation "androidx.paging:paging-compose:1.0.0-alpha14"
}
⚜️ Paging3 아키텍쳐
Android Developers 공식 문서에서 설명하는 Paging3 아키텍쳐와 각 레이어 별 클래스 종류에 대해 알아봅니다.
Android Developers 공식 문서에서 설명하는 Paging3 아키텍쳐와 각 레이어 별 클래스 종류에 대해 알아봅니다.
Android Developers 공식 문서에서는 아래와 같이 Paging3 아키텍쳐를 설명하고 있습니다.
위 그림에서 확인할 수 있는 것처럼 Paging3 라이브러리는 Android에서 권장하는 앱 아키텍쳐 구조에 통합되어 사용됩니다. 구조도 굉장히 유사하게 보입니다.
✅ Repository Layer
PagingSource
Repository Layer
에서 가장 기본적인 구성 요소입니다. 각 PagingSource
객체는 DataSource와 해당 DataSource에서 데이터를 검색하는 방법을 정의하게 됩니다. 또한, PagingSource
객체는 네트워크 작업 및 로컬 데이터베이스를 포함하여 전체 데이터로부터 부분적인 데이터를 로드할 수 있게 됩니다.
RemoteMediator
RemoteMediator
객체는 Network에서 데이터 로딩, 로딩한 데이터를 로컬 데이터베이스에 저장하는 역할을 수행합니다. 즉, Paging3에서 제공하는 Cache
기능에 적합하게 사용됩니다. RemoteMediator
를 사용하면 오프라인 상태에서도 Cache된 데이터를 불러올 수 있기 때문에 UX가 향상되는 이점이 있습니다.
✅ ViewModel Layer
Pager
Repository Layer
에서 구현된 PagingSource 객체를 반응형 Stream인 Flow<PagingData>
형태로 구성하는데 사용됩니다. 즉, Stream은 아래에서 살펴볼 PagingData
의 인스턴스로 구성됩니다.
PagingData
ViewModel Layer
를 UI Layer
로 연결하는데 사용되는 구성 요소입니다. PagingData
객체는 페이지가 메겨진 데이터의 Snapshot을 위한 Container 역할을 합니다. 또한, PagingData
는 PagingSource
객체를 쿼리하고 그에 대한 결과를 저장합니다. 따라서, 새로고침과 같은 새로운 쿼리에서 이에 상응하는 PagingData
가 별도로 생성된다고 볼 수 있습니다.
✅ UI Layer
PagingDataAdapter
PagingData
를 RecyclerView에 바인딩하기 위해 사용되는 Adapter입니다. PagingDataAdapter
는 백그라운드에서 DiffUtil
을 사용하기 때문에 데이터를 정제한 뒤 불러옵니다. 따라서, 새로운 데이터를 추가할 때 끊김없이 부드럽게 나타나게 됩니다.
⚜️ References
Android Developers 공식 문서
찰스님 블로그
Author And Source
이 문제에 관하여(Jetpack Paging3 - 1. 기본개념 알아보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jslee-dev/Jetpack-Paging3-1.-기본개념-알아보기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)