Jetpack Paging3 - 1. 기본개념 알아보기

4236 단어 jetpackPaging3Paging3

⚜️ 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 아키텍쳐를 설명하고 있습니다.

위 그림에서 확인할 수 있는 것처럼 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 LayerUI Layer로 연결하는데 사용되는 구성 요소입니다. PagingData객체는 페이지가 메겨진 데이터의 Snapshot을 위한 Container 역할을 합니다. 또한, PagingDataPagingSource객체를 쿼리하고 그에 대한 결과를 저장합니다. 따라서, 새로고침과 같은 새로운 쿼리에서 이에 상응하는 PagingData가 별도로 생성된다고 볼 수 있습니다.

✅ UI Layer

PagingDataAdapter

PagingData를 RecyclerView에 바인딩하기 위해 사용되는 Adapter입니다. PagingDataAdapter는 백그라운드에서 DiffUtil을 사용하기 때문에 데이터를 정제한 뒤 불러옵니다. 따라서, 새로운 데이터를 추가할 때 끊김없이 부드럽게 나타나게 됩니다.

⚜️ References

Android Developers 공식 문서
찰스님 블로그

좋은 웹페이지 즐겨찾기