Paging3 라이브러리를 사용하면 로컬DB(Room, SQLite)나 네트워크를 통해 대규모 데이터 페이지를 로드하고 표시할 수 있다! → 시스템 리소스를 모두 더 효율적으로 사용이 가능!
<aside> 💡 데이터의 전체를 불러오기 < 페이징으로 불러오기
</aside>
<aside> 💡 기존엔 RecyclerView 스크롤 끝을 감지해서 네트워크 호출하여 처리를 해줬는데, 다방면으로 좋은 기능들이 많다.
</aside>
dependencies {
def paging_version = "3.1.1"
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-alpha17"
}
build.gradle
에 종속항목을 추가해주고 라이브러리를 사용하면 된다.
안드로이드 권장 아키텍처에서 사용되니 AAC와 MVVM 패턴 숙지해야함.
PagingSource
: 특정 페이지 쿼리의 Data Chunk(한번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든후 Chunk단위로 트랜잭션. 커밋 사이에 처리되는 row의 수)를 로드하는 기본 클래스이다. 데이터 레이어(Data Layer)의 일부이고, 일반적으로 DataSource
클래스에서 노출되고 이후에 ViewModel
에서 사용하기 위해 Repository
에 노출된다.PagingConfig
: 페이징 동작을 결정하는 클래스. 페이지의 크기, placeholder 등등의 사용여부 설정Pager
: PagingData
스트림을 생성하는 클래스. PagingSource
에 따라 다르게 실행되며 ViewModel
에서 만들어야 한다.PagingData
: 페이지로 나눈 데이터의 컨테이너, 데이터를 새로고침할 때마다 자체 PagingSource
로 상응하는 PagingData
내보내기가 별도로 생성된다. → 페이지로 나눈 데이터의 스냅샷(데이터를 포착하여 보관)을 보유하고 있음PagingDataAdapter
: RecyclerView에 PagingData를 표시하는 Apdapter의 서브클래스. PagingDataAdapter
는 내부 PagingData
로드 이벤트를 수신 대기하고, 페이지가 로드될 때 UI를 효율적으로 업데이트한다.