[안드로이드 기초] RecyclerView 간단 정리

리사이클러뷰는 기존에 사용하던 리스트뷰의 단점을 보완하기 위해 등장한 라이브러리이다. 뷰홀더 패턴을 강제하며 보다 효율적으로 스크롤할 수 있는 리스트뷰를 구성하도록 도와준다.

뷰홀더 패턴을 강제함으로써 얻을 수 있는 이득은 기존의 리스트 뷰는 뷰홀더를 사용하지 않았기 때문에 매번 스크롤 될 때마다 뷰의 객체가 재생성되어야했다. 그러나 리사이클러뷰에서는 뷰홀더 패턴을 강제하여 뷰를 바인딩하지 않고 기존에 생성해두고 뷰도 바인딩을 해두었던 뷰홀더를 활용하여 불필요한 객체 생성에 대한 로드를 줄이는 것이다. 뷰홀더를 사용하기 때문에 스크롤 될 때마다 보여줘야할 뷰에 데이터만 바인딩 해주면 된다. 추가적으로 리사이클러뷰는 이름 그대로 뷰를 재활용하기 때문에 불필요하게 많은 뷰홀더 객체를 생성하지도 않는다.

동작하는 순서는 다음과 같다.

  1. getItemCount()로 보여줄 아이템의 수를 설정한다.
  2. getItemViewType()으로 보여줄 뷰홀더의 타입을 알아낸다. 이를 이용하여 여러 개의 뷰홀더를 보여줄 수도 있다.
  3. onCreateViewHolder()로 뷰홀더를 생성한다. 여기서 이미 ViewPool에 뷰홀더가 있으면 생성하지 않고 재활용하게 된다.
  4. onBindViewHolder()에서 보여줄 뷰에 데이터를 바인딩하여 뷰를 업데이트 한다. 이 메서드는 계속해서 불리기 때문에 로드를 최소화하는게 좋다. 너무 많은 로직을 처리하지 않도록 한다.

그리고 리사이클러뷰는 데이터를 업데이트하고 notifyDataSetChanged()로 전체적인 뷰를 갱신할 수 있고, 추가적으로 notifyItemRangeInserted, notifyItemRangeChanged, notifyItemInserted, notifyItemChanged를 통해 범위나 개별적으로 아이템을 업데이트 해줄 수 있다. 범위나 단일 아이템을 업데이트 할 경우 반드시 나열한 메서드를 활용하는게 좋다. notifyDataSetChanged()는 전체 뷰를 갱신하기 때문에 로드가 그만큼 크다.