안드로이드 RecyclerView 알아보기

RecyclerView 란?

  • 앱을 사용하다보면, 쇼핑몰이든 게시판이든 목록이 쭈욱- 나열된 페이지를 본 적이 있을 것이다! 거~의 모든 앱에서 리스트를 보여줄만큼 필수적이다.

    많은 데이터 (리스트, 목록) 를 보여주기 위한 위젯


ListView

  • 이전에는 목록을 보여줄 때 ListView 를 활용했었다.
  • ListView 는 스크롤하다가 화면을 벗어나면 해당 view 를 삭제하고, 해당 데이터를 보여줘야할 때 다시 생성하고 -> 삭제 -> 생성 -> 삭제 -> 생성 ... (무한반복)
    => 매번 view 를 만들어줘야하니 시간도 오래 걸리고 메모리도 많이 사용한다는 문제가 발생한다. 재사용성도 떨어짐!


ViewHolder 의 등장

  • 이러한 Listview 의 단점을 해결하기 위해 ViewHolder 가 등장했다.
  • 한 번 찾았던 view 를 다시 탐색하지 않도록 저장해두는 방식이다.
    => findViewById() 호출 횟수가 줄어든다!
  • 각 뷰를 보관하는 객체 라고 생각하면 될 것 같다!

  • 왼쪽의 ListView 는 모든 view 를 하나하나 생성하는 반면,
    ViewHolder 를 사용하는 RecyclerView 는 스크롤하다가 맨 위의 빨간 테두리칸이 화면에 보일 필요가 없으니 저장해두었다가,
    맨 아래 빨간 테두리 칸을 화면에 보여줄 때 재사용하는 것이다!


RecyclerView 와 ListView 의 차이

  • ViewHolder 클래스 활용
  • LayoutManager 지원
    RecyclerView 에서는 LayoutManager 를 설정할 수 있어 horizontal-scrolling, vertical-scrolling, grid 등등 view 를 다양하게 배치할 수 있다.
    Listview 에서는 vertical-scrolling 만 가능했는데,,!

  • ItemAnimator 지원
    RecyclerView 에서는 리스트가 사라지고 나타날 때, view 를 추가하거나 제거할 때 animation 을 지원한다. 커스텀해서 사용하는 것도 가능하다!

  • Notifying 관련 adapter
    RecyclerView 의 데이터가 변경됨을 알려주는 Notifying adapter 가 더욱 다양해졌다.

    `notifyDataSetChanged()` : 데이터가 변경됨을 알려준다.
    `notifyItemChanged(int position, Object payload)` : 특정 position 의 아이템이 변경됨을 알려준다. 
    `notifyItemInserted(int position)` : 특정 position 에 아이템이 추가되었음을 알려준다.
    등등 데이터 변경에 관련된 메소드들이 있다!

반면, ListView 에는 notifyDataSetChanged() 만 있는데.. 이건 그냥 데이터가 변경됨을 알려주는 메소드이기 때문에 RecyclerView 의 메소드를 통해 더 세세하게 활용할 수 있다!

좋은 웹페이지 즐겨찾기