[Android] Paging Library 에 대하여

2019. 9. 14. 15:33Android

반응형

# 오늘의 개념 : 

Paging Library of Android Jetpack

 

1. 개념 및 특징

아래는 developer.android.com 에서 설명한 개념이다.

페이징 라이브러리를 사용하면 한 번에 작은 데이터 청크를 로드하고 표시 할 수 있습니다. 요청시 부분 데이터를 로드하면 네트워크 대역폭 및 시스템 리소스 사용이 줄어 듭니다.

 

이 라이브러리는 Google I/O 2018 에 새로 소개된 Jetpack의 구성요소 중 하나이다. 여기서 Jetpack 이란,

Jetpack은 개발자가 고품질 앱을 손쉽게 개발할 수 있게 돕는 라이브러리, 도구, 가이드 모음입니다. 이 구성요소를 통해 권장사항을 따르고, 상용구 코드 작성에서 벗어나며, 복잡한 작업을 간소화함으로써 중요한 코드에만 집중할 수 있습니다.

 

Paging library의 특징

  • 데이터의 일부분을 점진적으로 불러옴

  • 데이터의 크기가 크고, 유한한 데이터 또는 무한한 데이터를 불러올 수 있음
  • Recyclerview와 사용
  • LiveData 또는 Rxjava와 사용

 

2. Architecture 

- PagedList

DataSource 에서 받아온 데이터를 담는 리스트.

기존 Recyclerview 에 들어가는 ArrayList 와 같은 맥락.

 

- Data

PagedList의 각 인스턴스는 해당 DataSource 객체에서 앱 데이터의 최신 스냅 샷을 로드. 

여기서 DataSource 란, PagedList에 Data를 제공하는 역할을 한다.

 

Data 유형 (어디로부터 데이터를 받아오는지)

  • Network(Retrofit 등 사용)
  • Database(SQLite)
  • File
  • 그 외

DataSource 유형

  • PageKeyedDataSource  : 데이터 요청 시, 이전/다음 데이터의 키가 필요한 경우 사용

  • ItemKeyedDataSource : 데이터 요청 시, 이전 데이터의 타임스탬프 등의 특정 요소를 이용하여 로드하는 경우

  • PositionalDataSource : 데이터 요청 시, 페이지 번호 또는 오프셋 등을 이용하여 로드하는 경우. 이 경우, 위의 2개와 달리 페이지 번호를 통해 특정 페이지를 바로 요청할 수 있음

 

- UI (PagedListAdapter)

PagedList의 데이터를 PagedListAdapter를 이용해 화면에 보여주는 작업.

 

 

 

3. 작동 원리. 어떻게 작동하는가? 

Paging Library의 전반적 흐름. (출처 : Google Codelab)

1) UI를 ViewModel 과 연결 : LiveData<PagedList> 와 PagedListAdapter 연결

2) LivePagedListBuilder 또는 RxPagedListBuilder 를 사용해 LiveData<PagedList> 와 DataSource 연결

3) 데이터를 불러온 DataSource가 새로운 PagedList객체를 제공

4) 이 새로운 객체를 PagedListAdapter에 전달 => UI 업데이트 (PagedListAdapter는 페이지 로드 이벤트를 PagedList.Callback 을 이용해 처리)

5) 사용자가 리스트 화면을 스크롤하면 -> PagedListAdapter 가 PagedList.loadAround() 호출하여 DataSource에서 가져와야 할 항목에 대한 힌트를 기본 PagedList에 제공

 

참고 : PagedList는 내용을 변경할 수 없습니다. 즉, 새 컨텐츠를 PagedList의 인스턴스에로드 할 수 있지만로드 된 항목 자체는 로드 된 후에는 변경할 수 없습니다. 따라서 PagedList의 내용이 업데이트되면 PagedListAdapter 객체는 업데이트 된 정보가 포함 된 완전히 새로운 PagedList를받습니다. (출처 : https://developer.android.com/topic/libraries/architecture/paging/ui)

 

 

 

4. 장단점 

- 장점

  • UI와 분리된 코드
  • 많은 비용이 드는 작업을 백그라운드 스레드에서 수행
  • 리스트의 Diffing 처리로 효과적인 UI 업데이트
  • 스크롤 시 언제 다음 데이터를 로드할 것인지 일일이 체크하지 않아도 됨.

 

- 단점

  • PagedListAdapter 를 통해 아이템을 직접 수정, 삭제, 추가할 수 없음
  • 이 외는 더 찾아봐야 할듯 ..

 

 

 

참조

https://developer.android.com/topic/libraries/architecture/paging

https://codelabs.developers.google.com/codelabs/android-paging/#2

https://developer.android.com/jetpack

https://www.youtube.com/watch?v=QVMqCRs0BNA  

https://medium.com/@jungil.han/paging-library-%EA%B7%B8%EA%B2%83%EC%9D%B4-%EC%93%B0%EA%B3%A0%EC%8B%B6%EB%8B%A4-bc2ab4d27b87

반응형