일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Coroutine
- 쿠링
- AWS
- Codeforces
- androidStudio
- 암호학
- 코드포스
- 코루틴
- pandas
- boj
- Hilt
- ProGuard
- Gradle
- TEST
- architecture
- activity
- textfield
- Compose
- relay
- android
- Python
- MyVoca
- Kotlin
- GitHub
- 프로그래머스
- livedata
- 백준
- Rxjava
- Coroutines
- MiTweet
- Today
- Total
이동식 저장소
Paging overview 본문
대량의 데이터를 유저에게 보이는 부분만 조금씩 가져오고 싶을 때 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를 사용해야 한다.
'Primary > Android' 카테고리의 다른 글
Parcelable vs. Serializable (0) | 2023.07.22 |
---|---|
Paging 구현 (기초) (0) | 2023.04.13 |
lifecycleOwner vs. viewLifecycleOwner (0) | 2023.03.17 |
Android Studio Giraffe 신기능 정리 (0) | 2023.02.18 |
App Startup (0) | 2023.01.25 |