[Android] API 통신 후 데이터 로딩 방식의 개선: RecyclerView vs Paging3

Sdoubleu·2024년 7월 1일
0

Android

목록 보기
14/16
post-thumbnail

서론

  • 배경
    초기에는 RecyclerView를 사용해 모든 데이터를 한 번에 로드하는 방식을 사용했습니다

  • 문제 인식
    한 번에 모든 데이터를 로드할 때 발생하는 문제점들을 경험한 후, 효율적인 데이터 로딩을 위해 Paging3를 도입했습니다

  • 목적
    이 글에서는 RecyclerView와 Paging3를 사용한 데이터 로딩 방식을 비교하고, Paging3 도입으로 얻은 성능 개선과 장단점을 설명합니다


기존 방식❌

RecyclerView를 통한 데이터 로딩

  • API 통신 후 모든 데이터를 한 번에 받아와 RecyclerView에 표시

RecyclerView 장점

  • 구현이 상대적으로 간단
  • 한 번에 모든 데이터를 로드하므로 페이지 간의 전환이 빠름

RecyclerView 단점

  • 한 번에 많은 데이터를 로드할 때 메모리 사용량 증가로 앱 성능 저하
  • 네트워크 상태가 좋지 않을 때, 모든 데이터를 받아오기까지 시간이 오래 걸림

개선 방식✔️

Paging를 통한 데이터 로딩

  • Paging3를 사용해 스크롤할 때마다 필요한 데이터를 동적으로 로드
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Feed> {
        val page = params.key ?: 0
        return try {
            val accessToken = sharedPreferences.getString("ApiAccessToken", null)
            val response = api.getAllFeeds(
                accessToken,
                page,
                params.loadSize,
                "createdAt,DESC"
            )
			val responseData = response.body()

            LoadResult.Page(
                data = responseData?.content ?: emptyList(),
                prevKey = if (page == 0) null else page - 1,
                nextKey = if (responseData?.last == true) null else page + 1
            )
        } catch (e: Exception) {
            LoadResult.Error(e)
        } catch (e: HttpException) {
            LoadResult.Error(e)
        }
    }
    
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    override suspend fun getFeeds(): Flow<PagingData<Feed>> {
        return Pager(
            config = PagingConfig(pageSize = 20, enablePlaceholders = false),
            pagingSourceFactory = {
                CommunityFeedPagingSource(
                    communityApi,
                    sharedPreferences
                )
            }
        ).flow
    }

paging 장점

  • 필요한 데이터만 로드하여 메모리 사용량 감소
  • 점진적으로 데이터를 로드하여 사용자 인터페이스가 더 부드럽고 응답성 높음
  • 초기 로딩 시 일부 데이터만 받아오기 때문에 응답 속도가 빨라짐

paging 단점

  • 구현이 복잡하고 추가 설정이 필요
  • 페이지 간 데이터 로딩 시 약간의 지연이 발생할 수 있음

비교 분석

  • Recyclerview - 초기 로딩 소요 시간
  • Paging - 페이지 로드 소요 시간


결론

Paging3를 도입함으로써 얻은 장점들이 기존의 Recyclerview 방식의 단점을 효과적으로 해결하는 모습을 통해,
데이터 로딩 방식의 중요성을 알 수 있었습니다

그러나 무작정 Paging을 사용하기보다 본인의 해당 프로젝트에서 많은 데이터를 다루지 않을 것 같다 생각이 든다면
Recyclerview로 해도 괜찮을 것 같습니다

profile
개발자희망자

0개의 댓글

관련 채용 정보