recyclerview

    [Android] DiffUtil과 Payload를 활용한 RecyclerView 성능 최적화

    안드로이드에서 안 쓰는 앱을 더 찾기 힘들 정도로 자주 사용되는 RecyclerView는 매우 유용하면서도 늘 성능 최적화를 고려해야 하는 리스트뷰다.성능 최적화 방법에는 여러 가지 접근 방식이 존재하겠지만, 가장 기본적이고 쉽게 RecyclerView의 성능을 최적화하는 방법이 있다.결론부터 말하자면 리스트의 아이템에 변경사항이 있을 때 전체 리스트를 갱신하는 대신, DiffUtil의 payload를 활용하여 변경된 부분만 업데이트하는 방법으로 RecyclerView의 성능을 크게 향상할 수 있다.만약 RecyclerView에 대량의 데이터가 노출되고 있을때, 리스트의 아이템이 빈번하게 변경될 때마다 전체 리스트를 갱신하는 방식은 비용이 매우 크며 성능 저하에 큰 영향을 미치게 된다.DiffUtil은 ..

    [Android] RecyclerView 성능 최적화를 위한 ListAdapter 살펴보기

    요즘 RecyclerView를 위한 Adpater를 구현할 때는 주로 RecyclerView.Adapter보단 ListAdapter를 상속받아 구현한다.ListAdapter는 androidx.recyclerview 패키지에 소속되어 있고 RecyclerView.Adapter를 확장한 클래스로 AsyncListDiffer를 통해 리스트 데이터를 비교하여 반영한다.ListAdapter의 생김새를 알아보자.public abstract class ListAdapter extends RecyclerView.Adapter { final AsyncListDiffer mDiffer; protected ListAdapter(@NonNull DiffUtil.ItemCallback diff..

    [Android] RecyclerView DiffUtil

    정의 RecyclerView에 현재 보이고 있는 Item에 변경이 일어날 경우 notifyItemChanged()를 통해 변경을 알려 새로고침을 해야 한다. 하지만 이 메소드를 통한 변경 알림은 adapter가 새로운 item 인스턴스를 생성하기 때문에 비용이 많이 들게 된다. 이러한 비효율적인 작업을 줄이고 합리적인 Item 변경을 위해 DiffUtil이 개발되었다. 이 클래스는 이전 목록과 새로운 목록 간의 차이점을 찾고 업데이트가 필요한 목록을 찾아 반환하여 RecyclerView의 adapter에 업데이트를 알린다. 위 동작의 기반은 Eugene W.Myers의 차이 알고리즘을 적용하여 최소한의 업데이트 수를 계산한다. 사용법 DiffUtil.Callback은 추상 클래스로 위에서 언급한 두 목록..