[Android][Kotlin] RecyclerView에서 Adapter와 ListAdapter의 차이점

Jay·2023년 3월 16일
0

Android

목록 보기
1/3

RecyclerView는 안드로이드 앱에서 목록을 표시할 때 자주 사용되는 유연한 뷰 구조입니다. 이 글에서는 RecyclerView를 사용할 때 선택할 수 있는 두 가지 어댑터 유형, 즉 기본 RecyclerView.Adapter와 확장된 ListAdapter에 대해 알아보겠습니다.

RecyclerView.Adapter

기본 RecyclerView.Adapter는 데이터를 관리하고 뷰 홀더를 바인딩하기 위한 기본 클래스입니다. RecyclerView.Adapter를 사용할 때 데이터 변경 사항을 처리하려면 아래와 같은 메서드를 수동으로 호출해야 합니다.

  • notifyDataSetChanged()
  • notifyItemChanged()
  • notifyItemInserted()

그 외의 다양한 notify 메서드들 또한 데이터 항목에 대한 동일성 및 내용 동일성을 수동으로 처리해야 합니다.

코드예제 :

FoodListAdapter.kt

class FoodListAdapter(private val clickListener: FoodClickListener) :
    RecyclerView.Adapter<FoodListAdapter.FoodListViewHolder>() {

    private val foodList = mutableListOf<FoodResponse.Food>()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodListViewHolder {
        return FoodListViewHolder.from(parent)
    }

    override fun onBindViewHolder(holder: FoodListViewHolder, position: Int) {
        holder.bind(foodList[position], clickListener)
    }

    override fun getItemCount(): Int {
        return foodList.size
    }

    fun submitList(list: List<FoodResponse.Food>) {
        foodList.clear()
        foodList.addAll(list)
        notifyDataSetChanged()
    }
}

ListAdapter

ListAdapter는 RecyclerView.Adapter를 확장한 것으로, 데이터 변경 사항을 자동으로 처리하는 추가 기능이 제공됩니다. ListAdapter는 내부적으로 AsyncListDiffer를 사용하여 백그라운드 스레드에서 효율적으로 목록의 차이를 계산하고 애니메이션을 자동으로 처리합니다.

ListAdapter를 사용하려면 DiffUtil.ItemCallback을 구현하여 동일성 및 내용 동일성을 처리해야 합니다. 이를 통해 데이터 변경 사항을 더 효율적으로 처리할 수 있습니다.

코드예제 :

PostListAdapter.kt

class PostListAdapter(private val clickListener: PostClickListener) :
    ListAdapter<Post, PostListAdapter.PostListViewHolder>(PostDiffUtil()) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PostListViewHolder {
        return PostListViewHolder.from(parent)
    }

    override fun onBindViewHolder(holder: PostListViewHolder, position: Int) {
        holder.bind(getItem(position), clickListener)
    }

어떤 것을 사용해야 할까?

ListAdapter를 사용하면 데이터 변경 사항을 처리하는 코드를 작성할 필요가 없으며, 애니메이션 처리와 성능 최적화를 자동으로 수행합니다. 이로 인해 개발이 더 간편해집니다. 그러나 경우에 따라서는 RecyclerView.Adapter를 사용하여 더 많은 제어를 원할 수도 있습니다. 따라서 대부분의 경우, ListAdapter를 사용하는 것이 좋습니다.

결론적으로, 간단한 목록에는 ListAdapter를 사용하면 개발 과정이 더 간편하고 효율적입니다. 그러나 더 복잡한 상황이나 목록에 대한 더 많은 제어가 필요한 경우에는 RecyclerView.Adapter를 사용할 수 있습니다. 어댑터를 선택할 때 애플리케이션의 요구 사항과 개발 편의성을 고려하면 좋습니다.

profile
Junior Developer

0개의 댓글