Android/Study

[Android] ListAdapter에서 DiffCallBack 정리

Tenacity_Dev 2024. 2. 29. 15:33
728x90
블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다.
조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자

 

저번에 RecyclerView에 대해서 포스팅을 하였을 때

https://superohinsung.tistory.com/314

 

[Bong#] RecyclerView에서 onCreateViewHolder와 onBindViewHolder의 차이

블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자. 졸업 프로젝트에서는 다른 여타 프로젝트와 달리

superohinsung.tistory.com

 

아래와 같은 코드를 본 적이 있을 것이다.

    companion object {
        private val diffCallback = object : DiffUtil.ItemCallback<CommentItemUiState>() {
            override fun areItemsTheSame(
                oldItem: CommentItemUiState,
                newItem: CommentItemUiState
            ): Boolean {
                return oldItem.commentId == newItem.commentId
            }

            override fun areContentsTheSame(
                oldItem: CommentItemUiState,
                newItem: CommentItemUiState
            ): Boolean {
                return oldItem == newItem
            }
        }
    }

 

이것은 DiffCallback에 대해서 Companion Object로 선언한 것이며, 이것은 DiffUtil.ItemCallback을 상속하여 두 항목 간의 차이를 결정하는 로직을 제공한다. 그리고 UserAdapter는 ListAdapter를 확장하면서 선언된 diffCallback을 사용하여 데이터 변경을 처리한다.

이렇게 함으로써, submitList 메서드를 호출하면 ListAdapter가 내부적으로 DiffCallback을 사용하여 이전 목록과 새로운 목록 간의 변경을 계산하고 UI를 효율적으로 업데이트할 수 있다.

 

 

728x90