[Android] Jetpack - Paging - 1

반응형

이번 포스팅에서는 Paging이라는 Library에 대해서 정리해보겠습니다.

Paging

Paging은 로컬 스토리지나 네트워킹을 통해 전달된 큰 데이터셋을 로드하거나 출력하는데 사용되는 라이브러리입니다. 이를 통해서 네트워크 대역폭이나 시스템 리소스를 효율적으로 사용할 수 있게 해줍니다. Paging의 Component들은 Kotlin 지원이 가능하고, 다른 Jetpack Component들과 통합할 수 있으며, 권장하는 Android App Architecture에 맞게 설계되었습니다.

 

설정

dependencies {
  def paging_version = "3.1.1"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // Android Dependancy 없이 테스트 
  testImplementation "androidx.paging:paging-common:$paging_version"

  // RxJava2 지원 (선택)
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  //RxJava3 지원 (선택)
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // Guava ListenableFuture 지원 (선택) 
  implementation "androidx.paging:paging-guava:$paging_version"

  // Jetpack Compose 통합 (선택)
  implementation "androidx.paging:paging-compose:1.0.0-alpha18"
}

 

라이브러리 아키텍쳐

Paging 라이브러리는 권장하는 Android 앱 아키텍처를 따라 통합되고, 3개의 계층으로 이루어져 있습니다.

  • Repository layer
  • ViewModel layer
  • UI layer

Paging 라이브러리가 앱 아키텍처에 어떻게 적용 되어있는지의 예

Repository layer

Repository layer의 중요한 Component는 PagingSource 입니다. 각각의 PagingSource 객체가 어떻게 데이터 소스를 정의하고 어떻게 데이터를 찾아야하는 정의합니다.

PagingSource 객체는 네트워크 소스 및 로컬 소스를 포함하 단일 소스에서 데이터를 로드할 수 있습니다.

 

또 하나 중요한 Component는 RemoteMediator 입니다. RemoteMediator 객체는 로컬 데이터베이스 캐시를 가진 네트워크 데이터 소스와 같은 계층화된 데이터 소스로부터 페이징을 처리합니다.

 

ViewModel layer

Pager Component는 PagingSource 객체 및 PagingConfig 구성 객체를 기반으로, 반응 스트림에 노출되는 PagingData의 인스턴스를 구성하기 위한 public API를 제공합니다. 

즉, ViewModel layer와 UI layer를 연결하는 Component가 PagingData 입니다.  PagingData 객체는 Paging된 데이터의 스냅샷을 위한 컨테이너 입니다.

PagingSource객체를 쿼리하고 결과를 저장하는 역할도 합니다.

UI layer

중요한 Component는 페이징된 데이터를 다루는 PagingDataAdapter와 RecyclerView 입니다. 또는 임의의 Adapter를 구성하기 위한 AsyncPagingDataDiffer도 있습니다. 

** Compose를 사용한다면, UI layer와 Paging을 통합할 수 있습니다.

 

 

반응형