Chandroid
Android Development Diary
Chandroid
전체 방문자
오늘
어제
  • 분류 전체보기
    • Today I Learned (TIL)
    • Android
      • Android Weekly
      • Android 13
      • Android Debug Bridge (ADB)
      • Library
      • View
      • Jetpack
      • Gist
    • Kotlin
      • Docs
      • Clean Code
    • Object-Oriented Programming
    • Etc
      • 정보처리기사 실기
      • 주절주절

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • Agile Software
  • Realm
  • clean code
  • DataBinding
  • til
  • GIST
  • Android
  • MVVM
  • kotlin
  • Android Debug Bridge
  • generics
  • Solid
  • ADB
  • DiffUtil
  • Android 13
  • Extensions
  • OOP
  • Database
  • Today I Learned
  • Kotlin Docs
  • Data classes
  • Sealed classes
  • RecyclerView
  • Glide
  • customview

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chandroid

Android Development Diary

[Android] RecyclerView에 DiffUtil 사용하기
Android/Jetpack

[Android] RecyclerView에 DiffUtil 사용하기

2022. 1. 28. 10:56

더 나은 방법이나 틀린 내용이 있을 시에 댓글 남겨주시면 감사하겠습니다.
2022-01-28 작성되었습니다.

[Android] RecyclerView 기본 사용법

🔍 DiffUtil이란?

안드로이드 공식 문서에서는

두 리스트의 차이를 계산하고 첫번째 리스트를 두번째 리스트로 변환하기 위한 업데이트 동작을 출력하는 유틸리티 클래스로 정의한다. (Eugene W.Myers's difference algorithm)

 

RecyclerView Adapter의 업데이트를 계산하는데 사용되며

notifyDataSetChanged(), notifyItemChanged() 등의 불필요한 사용을 지양할 수 있도록 도와준다.

 


✅ 주요 클래스

- DiffUtil.Callback

두 리스트의 차이를 계산할 때 DiffUtil에 의해 사용되는 콜백 클래스

 

- DiffUtil.DiffResult

DiffUtil.calculateDiff(Callback, boolean)호출의 결과에 대한 정보를 가지는 클래스

 

- DiffUtil.ItemCallback<T>

리스트의 null이 아닌 두 아이템의 차이를 계산한 콜백

 


✅ 구현

1. DiffUtil.Callback을 상속받는 CustomCallback 구현

  • getOldListSize() : 이전 리스트의 크기
  • getNewListSize() : 새로운 리스트의 크기
  • areItemsTheSame() : 같은 아이템인지 비교하는 함수로 아이템의 고유한 id 값으로 비교할 수 있다.
  • areContentsTheSame() : 아이템의 프로퍼티가 동일한지 비교하는 함수로 단순히 oldItem == newItem으로도 비교할 수 있지만 필자는 아이템의 세부항목들을 각각 비교했다.

 

2. Adapter에서 DiffCallback을 이용해 DiffResult를 반환받아 RecyclerView를 업데이트

어디까지나 샘플용이기 때문에 메인 스레드(Adapter)에서 작업했지만,

리스트의 크기가 클수록 딜레이가 생길 수 있다. 

따라서 비동기 스레드에서 DiffUtil의 사용을 권장한다.

 


 

Sample Source Code: https://github.com/yc-park/droidyc-CustomView
 

GitHub - yc-park/droidyc-CustomView

Contribute to yc-park/droidyc-CustomView development by creating an account on GitHub.

github.com

 

저작자표시 비영리 (새창열림)

'Android > Jetpack' 카테고리의 다른 글

[Android] RecyclerView에 DataBinding 활용하기  (0) 2022.01.12
[Android] DataBinding 살펴보기  (0) 2022.01.12
[Android] RecyclerView 기본 사용법  (0) 2022.01.11
    Chandroid
    Chandroid

    티스토리툴바