[Jetpack] Paging

minnie·2022년 1월 24일
0

Jetpack

목록 보기
11/13
post-thumbnail

0. Paging이란?

Paging이란 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 덩어리로 나눠서 가져오는 것이다. Paging을 사용하면 성능, 메모리, 비용 측면에서 굉장히 효율적이다. 인터넷 페이지를 생각하면 된다.

1. Jetpack Paging Library

Android Jetpack에서는 페이징을 위한 Paging3 라이브러리를 제공해준다. Paging3 라이브러리는 로컬 저장소에서나 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와준다. Paging3는 구글에서 권장하는 Android 앱 아키텍쳐에 맞게 설계 되었으며, 다른 Jetpack 컴포넌트와 잘 동작할 수 있도록 설계되었다. 라이브러리는 로컬 데이터베이스 또는 네트워크(Remote)의 데이터를 페이지 단위로 UI에 쉽게 표현할 수 있도록 도와주는 라이브러리이다.

📗 장점

  • 페이징 된 데이터의 메모리 내 캐싱. 이렇게 하면 앱이 페이징 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있다.
  • 요청 중복 제거 기능이 기본으로 제공되어 앱에서 네트워크 대역폭과 시스템 리소스를 효윻적으로 사용할 수 있다.
  • 사용자가 로드된 데이터의 끝까지 스크롤 할 때 구성 가능한 RecyclerView 어댑터가 자동으로 데이터를 요청한다.
  • Kotlin 코루틴 및 Flow뿐만 아니라 LiveData 및 RxJava를 최고 수준으로 지원한다.
  • 새로고침 및 재시도 기능을 포함하여 오류 처리를 기본으로 지원한다.

2. Paging3 구성요소

Paging3 라이브러리는 Repository, ViewModel, UI 총 3개의 layer로 구성된다.

1. Repository layer

📌 PagingData
페이징된 데이터의 Container 역할을 한다. 데이터가 새로고침 될 때마다 이에 상응하는 PagingData가 별도로 생성된다.

📌 PagingSource
로컬 데이터베이스 또는 네트워크로 데이터를 불러오는 것을 담당하는 추상 클래스이다. 데이터 소스를 정의하고 데이터를 검색하는 방법을 정의한다.

📌 RemoteMediator
네트워크에서 데이터를 불러올 때 캐싱하여 로컬 데이터베이스에 저장하고 그 데이터베이스에서 데이터를 불러온다. 오프라인 상태에서도 캐시된 데이터를 불러옴으로 유저 경험을 향상시켜줄 수 있다.

2. ViewModel layer

📌 Pager
Repository Layer에서 구현된 PagingSource와 함께 PagingData 인스턴스를 구성하는 반응형 스트림을 생성한다. Pager로부터 Flow, Observable, LiveData 형태로 반환한다.
PagingSource에서 데이터를 로드하는 방법, 옵션을 정의한 PagingConfig클래스와 함께 사용된다.

3. UI layer

📌 PagingDataAdapter
PagingData를 RecyclerView에 바인딩하기 위해 사용된다. 데이터를 어느 시점에서 더 받아올 것인가 등 UI와 관련된 대부분의 일을 책임진다.

출처 https://devlog-h.tistory.com/29

https://hanyeop.tistory.com/199

profile
Android Developer

0개의 댓글