
Paging3란?
Jetpack의 라이브러리 중 하나로 다양한 데이터 소스로 부터 데이터를 나누어 효과적으로 로딩해준다.
네트워크 또는 로컬 데이터베이스에서 데이터 페이지를 쉽게 로드할 수 있다.
Paging3의 강력한 장점은 Coroutines 뿐만 LiveData, RxJava를 최고수준으로 지원한다.
Paging3의 주요 클래스에 대해서 알아보자!
1️⃣ Paging Source
- 네트워크 또는 데이터베이스에서 페이징된 데이터 로드를 담당하는 추상 클래스이다.
- 이 클래스를 구현하려면 페이지 키 타입을 정의해야한다.
- PagingSource에서 로드된 데이터는 PagingData 인스턴스로 관리된다.
- 데이터를 검색하는 방법을 정의한다.
PagingDatasource에는 크게
1) PositionalDataSource, 2) ItemKeyedDataSource, 3) PageKeyedDataSource가 있다.
✔ PositionalDataSource
- 말 그대로 position based data loader이다.
- 셀 수 있는고정된 사이즈를 갖는 데이터를 페이징하는데 적합하다. 만약 데이터의 사이즈를 정확히 모르거나 런타임에만 알 수 있다면 적합하지 않다.
✔ ItemKeyedDataSource
가장 일반적인 케이스이다. ItemKeyedDataSource는 서버나 데이터베이스로부터 해당 기준된 Key로부터 데이터를 로드시켜 페이징을 할 수 있게 도와준다.
✔ PageKeyedDataSource
ItemKeyedDataSource가 하나의 아이템키에 대한 기준으로 데이터를 가져왔다면, PageKeyedDataSource는 페이지키 단위로 데이터를 불러들인다. 단 데이터베이스로부터 다음페이지와 이전페이지를 받아야한다.
2️⃣ RemoteMediator
- 네트워크 및 로컬DB에서 페이징 데이터를 로드하는 역할을 한다.
3️⃣ Pager
- PagingSource 객체 및 PagingConfig 구성 객체를 바탕으로 반응형 스트림에 노출되는 PagingData를 발행한다.
- 각 PagingData는 페이징 된 데이터 스냅샷을 나타내며, Pager로부터 Flow, Observable, LiveData 형태로 반환된다.
4️⃣ Paging Data
- 페이징된 데이터를 담아두는 역할을 한다. 최종적으로 반환되는 데이터 타입이며, PagingDataAdapter가 이를 전달받는다.
5️⃣ PagingConfig
- Pager 객체를 생성하는데 필요한 필수요소로, 페이징에 관한 설정을 담당한다.
- 페이징하는 데이터 크기 및 PlaceHolder사용유무등 PagingSource를 구성하는 방법을 정의한다.
6️⃣ PagingDataAdapter
- 주된 UI구성요소로 Recyclerview에 데이터를 나타내는 책임을 갖는다.
- 또한 PagingData를 입력받아 내부적으로 언제 데이터를 추가적으로 Load할지 관찰한다.
- 백그라운드에서 DiffUtil을 사용하여 데이터를 정제한 뒤에 데이터를 불러오기 때문에 최종적으로 UI Thread에서 새로운 아이템들을 추가할 때 부드럽게 나타난다.
다음에는 Paging을 이용하여 로컬 이미지파일을 읽어온 후 uri를 띄워주어 갤러리를 만들어볼 예정이다.
'Android' 카테고리의 다른 글
| [Android] Navigation Backstack Controll and Pass Data (0) | 2021.04.06 |
|---|---|
| [Android] Multi Select Gallery만들기 with Paging (0) | 2021.04.05 |
| [Android] RxJava로 Room구현하기 (0) | 2021.03.26 |
| [Android] 검색어 저장 기능 구현해보기(dagger-hilt, room, coroutine, mvvm) (0) | 2021.03.25 |
| [Android] Naver검색 api - RxJava, Retrofit, MVVM, Hilt (0) | 2021.03.22 |