Paging overview
대량의 데이터를 유저에게 보이는 부분만 조금씩 가져오고 싶을 때 Jetpack Paging 라이브러리를 사용할 수 있다.
아키텍쳐
Paging 라이브러리는 ``DataStore`` → ``Repository`` → ``ViewModel`` → ``UI``로 이어지는 안드로이드 권장 아키텍쳐에서 바로 사용할 수 있다. 이 문단에서는 개념만 소개하고, 아래에서 실제로 구현해 보겠다.
Repository layer
Repository layer에서는 ``PagingSource``를 정의해야 한다. ``PagingSource``는 하나의 source로부터 데이터를 로드하는 작업을 정의한다. 예를 들어 로컬 DB나 원격 서버에서 데이터를 받아오는 작업을 정의할 수 있다.
데이터를 받아오는 로직이 계층 구조로 되어 있다면 ``RemoteMediator``를 사용할 수도 있다. 예를 들어 원격 서버에서 받아온 데이터를 로컬 DB에 캐시하여 저장하는 경우에 ``RemoteMediator``를 사용할 수 있다.
ViewModel layer
ViewModel layer에서는 ``Pager``를 사용해야 한다. ``Pager``를 사용하면 ``PagingSource``와 ``PagingConfig``(페이징 구성 객체)로부터 ``PagingData``를 만들 수 있다. ``PagingData``는 페이징된 데이터의 일부를 담는 객체이다.
만들어진 ``PagingData``는 ``Flow``나 ``LiveData``, RxJava를 통해 UI로 전달된다.
UI layer
UI 레이어에서는 ``RecyclerView``의 어댑터 중 ``PagingDataAdapter``를 사용하여 데이터를 보여준다. 또는 ``AsyncPagingDataDiffer``를 상속받아 커스텀 어댑터를 작성할 수도 있다.
Compose를 사용하고 있다면 ``collectAsLazyPagingItems()`` API를 사용해야 한다.