[안드로이드 기초] RecyclerView 간단 정리
리사이클러뷰는 기존에 사용하던 리스트뷰의 단점을 보완하기 위해 등장한 라이브러리이다. 뷰홀더 패턴을 강제하며 보다 효율적으로 스크롤할 수 있는 리스트뷰를 구성하도록 도와준다.
뷰홀더 패턴을 강제함으로써 얻을 수 있는 이득은 기존의 리스트 뷰는 뷰홀더를 사용하지 않았기 때문에 매번 스크롤 될 때마다 뷰의 객체가 재생성되어야했다. 그러나 리사이클러뷰에서는 뷰홀더 패턴을 강제하여 뷰를 바인딩하지 않고 기존에 생성해두고 뷰도 바인딩을 해두었던 뷰홀더를 활용하여 불필요한 객체 생성에 대한 로드를 줄이는 것이다. 뷰홀더를 사용하기 때문에 스크롤 될 때마다 보여줘야할 뷰에 데이터만 바인딩 해주면 된다. 추가적으로 리사이클러뷰는 이름 그대로 뷰를 재활용하기 때문에 불필요하게 많은 뷰홀더 객체를 생성하지도 않는다.
동작하는 순서는 다음과 같다.
- getItemCount()로 보여줄 아이템의 수를 설정한다.
- getItemViewType()으로 보여줄 뷰홀더의 타입을 알아낸다. 이를 이용하여 여러 개의 뷰홀더를 보여줄 수도 있다.
- onCreateViewHolder()로 뷰홀더를 생성한다. 여기서 이미 ViewPool에 뷰홀더가 있으면 생성하지 않고 재활용하게 된다.
- onBindViewHolder()에서 보여줄 뷰에 데이터를 바인딩하여 뷰를 업데이트 한다. 이 메서드는 계속해서 불리기 때문에 로드를 최소화하는게 좋다. 너무 많은 로직을 처리하지 않도록 한다.
그리고 리사이클러뷰는 데이터를 업데이트하고 notifyDataSetChanged()로 전체적인 뷰를 갱신할 수 있고, 추가적으로 notifyItemRangeInserted, notifyItemRangeChanged, notifyItemInserted, notifyItemChanged를 통해 범위나 개별적으로 아이템을 업데이트 해줄 수 있다. 범위나 단일 아이템을 업데이트 할 경우 반드시 나열한 메서드를 활용하는게 좋다. notifyDataSetChanged()는 전체 뷰를 갱신하기 때문에 로드가 그만큼 크다.