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.)