Primary/Android

Paging overview

해스끼 2023. 4. 12. 22:21

대량의 데이터를 유저에게 보이는 부분만 조금씩 가져오고 싶을 때 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를 사용해야 한다.