
제어 즐겨찾기 영역에서 특정 기기를 호출할 때마다, 전체 기기 목록이 업데이트되는 문제가 발생했었다.
이런 상황은 반복적으로 성능 문제를 일으켰다.
문제의 원인을 분석해본 결과, RecyclerView의 어댑터가 UI에 데이터 변경 사항을 알릴 때 notifyDataSetChanged 메소드를 사용하고 있었기 때문에, 다음과 같이 전체 기기 목록이 갱신되는 것을 확인했다.

이 문제는 어댑터의 아이템 위치값(position)을 활용하여 notifyItemChanged 메소드를 호출함으로써 해결할 수 있었다. notifyItemChanged는 지정된 위치의 아이템만을 업데이트하므로, 전체 목록을 갱신하는 것보다 훨씬 효율적이다.
이 방법으로 성능 문제를 개선하고 사용자 경험을 향상시킬 수 있었다.
이 경험을 통해 RecyclerView의 데이터 변경 시, UI를 효과적으로 업데이트하기 위해 사용할 수 있는 다양한 메서드를 알게 되었다.
아래는 그 중 몇 가지 주요 메서드들에 대한 설명이다.
- notifyDataSetChanged():
전체 데이터셋이 변경되었다고 RecyclerView에 알린다.
이 메서드는 RecyclerView에 연결된 모든 뷰를 다시 바인딩하고 레이아웃을 다시 계산하게 만든다.
성능에 영향을 줄 수 있으므로, 전체 데이터셋이 변경되지 않았다면 아래의 더 구체적인 메서드들을 사용하는 것이 좋다. - notifyItemChanged(int position):
특정 위치(position)에 있는 데이터가 변경되었다고 RecyclerView에 알린다.
이 메서드는 변경된 위치의 뷰만 업데이트하므로, 성능 측면에서 notifyDataSetChanged()보다 효율적이다. - notifyItemInserted(int position):
특정 위치에 데이터가 새로 추가되었다고 RecyclerView에 알린다. 이는 삽입된 아이템과 관련된 애니메이션을 트리거할 수 있다. - notifyItemRemoved(int position):
특정 위치의 데이터가 제거되었다고 RecyclerView에 알린다. 이는 제거된 아이템과 관련된 애니메이션을 트리거할 수 있다. - notifyItemMoved(int fromPosition, int toPosition):
데이터가 한 위치에서 다른 위치로 이동했다고 RecyclerView에 알린다. 이는 이동과 관련된 애니메이션을 트리거할 수 있다. - notifyItemRangeChanged(int positionStart, int itemCount):
특정 범위의 데이터가 변경되었다고 RecyclerView에 알린다. 이는 주어진 범위 내의 아이템들이 변경되었음을 나타낸다. - notifyItemRangeInserted(int positionStart, int itemCount):
특정 범위에 데이터가 새로 추가되었다고 RecyclerView에 알린다. 여러 아이템이 한 번에 추가될 때 유용하다. - notifyItemRangeRemoved(int positionStart, int itemCount):
특정 범위의 데이터가 제거되었다고 RecyclerView에 알린다. 여러 아이템이 한 번에 제거될 때 유용하다.
적절한 메서드를 사용하여 데이터 변경 시 RecyclerView의 UI를 효율적으로 업데이트함으로써, 성능을 최적화하고 원활한 사용자 경험을 제공할 수 있다.
반응형