DiffUtil이란

최대환·2024년 2월 1일
0

DiffUtil은 리사이클러뷰를 사용할때 데이터가 변동이 있을경우, 전체 데이터를 갱신하는것이 아닌 변동된 부분만 갱신하여 더욱 효율적으로 데이터를 관리할수 있도록 해준다.
예를들어 아래와 같은 데이터가 있다고 했을때

cat1
cat2
cat3
cat4
cat5

여기서 cat3 가 cat6로 변경되면, 이전에는 전체 데이터를 다시 불러와야했지만, DiffUtill을 사용하면 데이터를 비교하여 견경된 부분만 갱신한다.

cat1
cat2
cat6
cat4
cat5

DiffUtil은 areItemsTheSame(int, int)메소드를 통해 두 객체가 같은 항목을 나타내는지 확인하고,
areContentsTheSame(int, int)멜소드를 통해 두 항목의 데이터가 같은지 확인한다.
이러한 작업은 DiffUtil.ItemCallback을 상속받은 콜백 객체를 통해 이루어진다.
아래는 DiffUtil을 사용하는 예제코드입니다.

private val DiffCallBack = object: DiffUtil.ItemCallback<CatDataModel>() {
    override fun areItemsTheSame(oldItem: CatDataModel, newItem: CatDataModel): Boolean {
        // 항목의 고유 ID를 비교
        return oldItem.catId == newItem.catId
    }

    override fun areContentsTheSame(oldItem: CatDataModel, newItem: CatDataModel): Boolean {
        // 항목의 데이터 내용을 비교
        return oldItem == newItem
    }
}

이렇게 생성한 DiffCallBack객체를 ListAdapter나 RecyclerView.Adapter 등에 전달하여 사용하면 된다.
submitList()를 호출하면 어댑터는 이전에 가지고있던 리스트와 새로운 리스트를 비교하여 업데이틑 한다.

val newList = listOf(CatDataModel(1, "cat1"), CatDataModel(2, "cat2"), CatDataModel(3, "cat6"), CatDataModel(4, "cat4"), CatDataModel(5, "cat5"))
adapter.submitList(newList)
profile
나의 개발지식 output 공간

0개의 댓글