서론
사용자에게 정보를 표시하는 list 방식에서 사용자가 해당 list를 스크롤할 때 더 보기 혹은 로딩 view가 노출되면서 데이터가 추가로 보이는 경우를 본 경험이 있을 것이다. 이런 식으로 정보를 가져오는 방식을 Paging이라 한다. 기존에는 코드를 통해 작성했지만, jetpack에서 제공하는 Paging3를 활용하면 효율적인 Paging 구현이 가능하다.
Paging3를 사용하기 위해 해당 내용을 정리해보려 한다😊
Paging 라이브러리 사용 이점
구글 공식문서에서 설명하는 Paging 라이브러리 사용 이점은 아래와 같다.
- Paging 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있다.
- 요청 중복 삭제 기능이 기본 제공되기 때문에, 앱에서 네트워크 대역폭과 시스템 리소스를 효율적으로 사용할 수 있다.
- 사용자가 로드된 데이터의 끝까지 스크롤할 때 구성 가능한 RecyclerView Adapter가 자동으로 데이터를 요청한다.
- Kotlin 코루틴/Flow 뿐만 아니라 Livedata 및 RxJava를 최고 수준으로 지원한다.
- 새로고침 및 재시도 기능을 포함하여 오류 처리를 기본으로 지원한다.
라이브러리 아키텍처
Paging 라이브러리의 구성요소는 아래 3가지 레이어에서 동작한다.
- Repository 레이어
Repository 레이어의 기본 페이징 라이브러리 구성요소는 PagingSource이다. 각 PagingSource 객체는 데이터 소스와 이 소스에서 데이터를 검색하는 방법을 정의한다. PagingSource 객체는 네트워크 소스 및 로컬 데이터베이스를 포함한 단일 소스에서 데이터를 로드할 수 있다.
RemoteMediator 객체는 로컬 DB 캐시가 있는 네트워크 데이터 소스와 같은 계층화된 데이터 소스의 페이징을 처리한다. - ViewModel 레이어
Pager 구성요소는 PagingSource 객체 및 PagingConfig 구성 객체를 바탕으로 반응형 스트림에 노출되는 PagingData 인스턴스를 구성하기 위한 공개 API를 제공한다.
ViewModel 레이어를 UI에 연결하는 구성요소는 PagingData이다. PagingData 객체는 페이지로 나눈 데이터의 스냅샷을 보유하는 컨테이너다. PagingSource 객체를 쿼리 하여 결과를 저장한다. - UI 레이어
UI 레이어의 기본 페이징 라이브러리 구성요소는 페이지로 나눈 Data를 처리하는 RecyclerView 어댑터인 PagingDataAdapter이다.
또는 포함된 AsyncPagingDataDiffer를 사용하여 고유한 맞춤 어댑터를 빌드할 수 있다.
마치며
간단하게 jetpack의 Paging3에 관해 정리해 보았다. 기존 Paging 구현을 소스로 직접 하는 방식보다 간단하게 구현이 가능하고 오류 발생 가능성도 줄일 수 있다는 장점이 있는 것 같다.
구글의 예시대로 페이징 처리를 구현하는 것은 생각보다 간단했는데, 기존에 학습 중이던 clean architecture에 Paging을 적용하려 하니, 어느 모듈에 위치해야 하고 데이터 모델은 어느 모듈에 써야 하는 등 다양한 이슈가 있었다.
위 이슈를 해결한 뒤 Paging 예제와 함께 다음 포스팅을 작성해보려 한다.
Reference
페이징 라이브러리 개요 | Android 개발자 | Android Developers
컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Paging 라이브러리 개요 Android Jetpack의 구성요소 Paging 라이브러리를 사용하면 로컬 저장소에서나 네트워크
developer.android.com