Skip to content

[성능] 필터링 걸고 아이템을 체크했을 때 앱의 반응속도가 느려지는 현상

Ari edited this page Jul 24, 2022 · 1 revision

수집하지 못한 아이템으로 필터링을 걸어둔 상태에서 아이템을 수백개 체크해보았는데, 수집한 아이템이 늘어날수록 체크버튼을 터치했을 때, 앱의 반응 속도가 떨어지는 것을 발견해버렸다. 이를 해결하기 위해 원인을 분석해보았다.

  • 먼저 Date 타입을 활용하여 성능 저하가 의심되는 구간의 실행 시간을 측정해보았다.
183871212768555 Pasted Graphic
  • 그랬더니 위와 같이 획득 아이템의 숫자가 많아질 수록 실행 시간이 늘어나는 것을 확인할 수 있었다.
  • 당시 필터링 하던 코드는 다음과 같았는데...
Pasted Graphic 2
  • 살펴보니 이중 반복문과 다름이 없는 필터링 코드였다. (시간 복잡도가 O(n)인 듯...) 그래서 이 부분을 개선하기 위해서 구글링을 시도해보았다.
  • 쉬운 방법으로 Set를 활용해보라는 답변을 참고하여 수정을 진행했다. 최상의 성능을 위해 BitSet을 사용하는 방법도 있지만, 나는 필터링만 하고 다시 배열로 변환할거기 때문에 이 방법은 패스했다.
Pasted Graphic 4
  • 위와 같이 대칭차 집합연산을 활용해서 전체 아이템에서 수집아이템이랑 겹치지 않는 아이템을 필터링 하였고 이를 통해 성능을 개선할 수 있었다.

획득 아이템이 아까보다 더 많지만, 일정한 실행시간을 보여주고 있다. 이전에는 0.3초까지 늘어났었다.

0 029374003410339355

시간 복잡도를 항상 알고리즘 문제 풀이에서만 신경써오다가... 실제 개발을 할때 문제를 맞닥뜨리니, 새삼 시간복잡도가 개발에 있어서 중요한 요소임을 다시 한번 깨닫게 되었다.


Clone this wiki locally