[kotlin] 뷰 홀더

안드로이드 앱을 개발하면서 리사이클러뷰나 리스트뷰를 사용하는 경우, 뷰 홀더(View Holder)를 자주 들어보게 됩니다. 뷰 홀더는 리스트뷰나 리사이클러뷰와 같은 AdapterView를 사용할 때 사용되는 패턴으로, 화면에 표시할 데이터를 담고 있는 뷰 객체를 보관하여 재사용하는 역할을 합니다.

뷰 홀더의 역할

리스트뷰나 리사이클러뷰에서는 한 화면에 많은 아이템을 표시해야 할 때가 있습니다. 이때, 각각의 아이템이나 뷰를 나타내는 뷰 객체들을 생성하여 보관하는 것은 비효율적입니다. 뷰 홀더 패턴은 이런 문제를 해결하기 위해 사용됩니다. 뷰 홀더는 각 아이템의 뷰들을 한 번 생성하고 재활용하여 성능을 향상시키는 역할을 합니다.

뷰 홀더 사용 방법

  1. 뷰 홀더 클래스 설계: 뷰 홀더 패턴을 사용하기 위해서는 뷰 홀더를 위한 클래스를 설계해야 합니다. 이 클래스는 각 뷰의 요소를 저장하고, 각 뷰의 요소를 바인딩할 때 사용됩니다.

    예시:

     class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
         private val titleTextView: TextView = view.findViewById(R.id.title)
         private val subtitleTextView: TextView = view.findViewById(R.id.subtitle)
         // 다른 뷰 요소들도 추가로 선언할 수 있음
     }
    
  2. 뷰 홀더 생성: onCreateViewHolder 메서드를 통해 뷰 홀더 객체를 생성합니다.

    예시:

     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
         val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
         return MyViewHolder(view)
     }
    
  3. 뷰 홀더 재활용: onBindViewHolder 메서드에서 뷰 홀더에 데이터를 바인딩합니다.

    예시:

     override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
         val item = itemList[position]
         holder.titleTextView.text = item.title
         holder.subtitleTextView.text = item.subtitle
     }
    

마치며

뷰 홀더 패턴은 안드로이드 앱의 성능을 향상시키기 위한 중요한 패턴 중 하나입니다. 리스트뷰나 리사이클러뷰 등의 AdapterView를 사용할 때는 뷰 홀더를 통해 효율적으로 화면을 구성할 수 있도록 합니다.

참고 문헌: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder