Reyclerview에서 데이터를 업데이트 하기 위해 주로 notifyItemChanged를 사용하는데, 이번에는 DiffUtil를 이용하여 바뀐 데이터만 업데이트 해주는 방식을 알아보려고 합니다🐥🐥
👉🏻RecyclerView의 notifyItemChanged
RecyclerView가 갖고 있는 Item이 변하게 되면 notifyItemChanged로 알려줘야 함.
하지만 위 메소드는 adapter가 새로운 item 인스턴스를 만들도록하기 때문에 비용이 많이 들음.
DiffUtil의 구성
areItemsTheSame( oldPosition:Int , newPosition:Int) : 두 객체가 동일한 항목을 나타내는지 확인
getOldListSize() : 바뀌 기 전 리스트의 크기를 리턴
getNewListSize() : 바뀐 후 리스트의 크기를 리턴
areContentsTheSame( oldPosition:Int, newPosition:Int) : 두 항목의 데이터가 같은지 확인
👉🏻oldItem과 newItem은 CovidData data class 타입을 가지고 있고
같은 아이템인지 확인하기 위해 두 아이템의 고유 ID를 확인한다.
*비 추상 메소드
getChangePayload(oldPosition:Int , newPosition:Int)
areItemsTheSame == true && areContentsTheSame==false일 경우에 호출
DiffUtil은 두 목록 간의 추가 및 제거 작업의 최소 수를 찾기 위해 O(N) 공간이 필요하다.
예상되는 성능은 O(N + D²)입니다.
Reference
https://onemask514.tistory.com/48
https://developer.android.com/reference/android/support/v7/util/DiffUtil.html