멋있게걷는방법

[Swift] 지금 바로 Pagination 을 적용해야 하는 이유 본문

iOS

[Swift] 지금 바로 Pagination 을 적용해야 하는 이유

도현D 2023. 6. 8. 01:28

프로젝트에 단순 데이터를 불러오는 게 아닌, page 단위로 불러오면 메모리 효율을 아낄 수 있는데요,

이게 바로 Pagination 입니다. 무한스크롤이라고도 하죠.

 

Pagination 은 메모리 효율을 아낄 수 있다고 했는데, 그 이유는 뭘까요?

 

들어가기 전에,

tableView의 delegate, datasource로 tableView를 구성했다면 대부분
dequeueReusableCell를 이용해 재사용 셀을 구성했을 겁니다.

 

만약 Rx를 쓴다면?

.drive(postTableView.rx.items(cellIdentifier: PostCell.identifier,
                              cellType: PostCell.self)) { (row, data, cell) in

이런 식으로 쉽게 구현할 수 있었을 것입니다.

 

그럼 본론으로 들어가서,

 

Pagination을 사용하면 얻는 장점

(대부분 일정 범위까지의 데이터만 로드하기 때문에 얻는 장점입니다.)

1. 효율적인 데이터 로딩

기존엔 모든 데이터를 불러왔다면 Pagination 을 적용하면 현재 보이는, 또는 일정 범위까지의 데이터만

로드하기 때문에 로딩 시간을 크게 줄일 수 있습니다. 예를 들어 인터넷이 느리거나 규모가 큰 대량의 데이터를 다룰 때 유용합니다.

 

2. 메모리 관리

tableView를 띄운다면 내가 볼 수 없는 곳까지의 데이터를 굳이 불러오는 건 메모리 낭비겠죠? Pagination을 사용하면 필요한 페이지만 로드하여 메모리 사용을 최적화할 수 있습니다. 또한 필요하지 않은 데이터를 메모리에 유지하지 않아도 되므로 앱의 메모리 사용량을 줄일 수 있습니다.

 

3. 캐싱 & 재사용

pagination 은 페이지 단위로 데이터를 처리하기 때문에 각 페이지를 캐싱하고 재사용할 수 있습니다.

예를 들어 첫 번째 페이지를 로딩을 완료했는데 네트워크 연결이 끊어졌다면,
첫 번째 페이지의 데이터는 캐싱된 메모리를 통해 보일 수 있습니다.

 

아래는 제가 직접 프로젝트에 Pagination을 적용시키면서 확인한 메모리 사용량 비교입니다.

(response는 title, content, image1, image 2, voteCount, commentCount 이렇게 구성되어 있습니다.

image의 종류에 따라 메모리가 크게 변할 수 있음.)

 

(Before, After는 서로 비슷한 환경에서 테스트함.)

 

Before

 

After

 

적용 전엔 메모리 사용량이 점점 증가했다면, 적용 후엔 오히려 감소하는 걸 볼 수 있습니다.

(테스트 당시에 데이터 개수가 많지는 않았습니다.)

 

좀 더 많은 데이터를 갖고 체크해 봤습니다.

(Before, After와 다른 환경입니다. (데이터 크기, 내용..))

데이터가 많아도 한 번에 모든 데이터를 로드하지 않고,

정해진 범위 내의 데이터만 로드하기 때문에 효율적으로 메모리를 관리할 수 있는 것 같습니다!

 

 

추가로  참고하면 좋은 것

- 애플 기본 갤러리에 있는 이미지는 생각보다 많은 메모리를 차지한다.

- 스크롤 속도에 따라 그래프 모양은 달라질 수 있으니 참고하시길..