[Android] ListView vs RecyclerView

hegleB·2023년 6월 14일
0
post-thumbnail

인스타그램, 유튜브 등과 같은 앱을 보면 리스트 형식으로 되어 있는 것을 볼 수 있다. 거의 모든 앱에 사용되어 지고 있다. 이때 사용되는 것이 RecyclerView이다. ListView와 RecyclerView 두 가지 모두 리스트 형식으로 되어 있다. 그럼 어떤 차이점이 있는지 알아보자

ListView

ListView는 안드로이드 플랫폼에서 오래된 버전부터 사용된 View이며, ArrayAdapter 또는 BaseAdapter를 사용하여 데이터와 뷰를 연결한다.
ListView는 아이템의 전체 개수를 보여주는 것이 아니라 화면에 보여지는 만큼만 View를 그려놓고 그것을 다시 재활용할 수 있는 구조로 되어 있다.

위의 그림처럼 10개의 아이템이 있고 5개가 화면에 보인다면 10개의 부 객체가 Setting 된 후 모두 보여주는 것이 아니라 5개의 뷰 객체만 보여준다. 스크롤을 하게 되면 3번째 View는 사라지고 8번째 View가 보여지게 된다. 이때 View는 새로 생성되는 것이 아니라 기존의 View를 재사용하여 화면에 Setting되어진다.

ConvertView : 실제 화면에 그려지는 아이템을 관리하는 배열
ConvertView는 화면에 보여주는 View를 생성하고 스크롤을 하면 View 재활용하고 Adapter의 getView()를 통해서 관리되어 진다.
새로운 아이템이 생성될 떄 마다 getView()가 호출한다

var mainView = convertView


if(mainView == null){
    
    rowBiding = RowBinding.inflate(layoutInflater)
    mainView = rowBiding.root

    mainView!!.tag = rowBiding
}

else {
    rowBiding = mainView!!.tag as RowBinding
}

ConvertView가 null이면 inflate을 통해 아이템을 설정하고 재활용되는 뷰를 tag를 통해 관리한다.
ConvertView가 null이 아니라면 tag에 저장되어 있는 뷰를 rowBinding에 데이터를 바꾸어 메모리를 낭비하지 않도록 한다.

RecyclerView

RecyclerView는 안드로이드 지원 라이브러리인 Support Library에 속하는 컴포넌트로서 ListView의 대안으로 도입되었다. LayoutManager를 사용하여 아이템의 배치와 스크롤 동작을 제어하고 RecyclerView.Adapter를 통해 데이터와 뷰를 연결한다.
RecyclerView는 ListView와는 다르게 ViewHolder 패턴을 사용하여 뷰를 재활용한다.
ViewHolder는 리스트 아이템의 뷰를 보유하고 있고, 이를 관리하는 역할을 한다.
ViewHolder에는 해당 아이템의 뷰를 참조하는 주소값을 가지고 있어 화면에 뷰가 보여질 때 그 주소값을 통해 해당하는 데이터를 가져와서 아이템의 뷰를 보여주도록 한다.

inner class RecyclerAdapterClass : RecyclerView.Adapter<RecyclerAdapterClass.ViewHolderClass>() {

        inner class ViewHolderClass(rowBinding: RowBinding) : RecyclerView.ViewHolder(rowBinding.root) {
           
        }

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
           
        }

        override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
           
        }

        override fun getItemCount(): Int {
     
        }
    }

그럼 ViewHolder는 어디에서 생성이 될까? 바로 onCreateViewHolder() 메서드에서 ViewHolder가 생성이 된다. findViewById() 또는 ViewBinding을 통해 ViewHolder의 필드를 저장하고 이 후 onBindViewHolder() 메서드에서 해당 뷰를 사용하여 데이터를 설정하거나 뷰를 업데이트 한다.

장단점

ListView

장점

  • RecyclerView보다 쉽게 구현
  • 간단한 아이템 형태인 경우 ArrayAdapter를 통해 빠르게 적용

단점

  • 아이템 애니메이션 처리의 어려움
  • 한 개이상의 View가 필요한 경우 커스텀하기 어려움

RecyclerView

장점

  • Layout Manager를 사용하여 아이템의 배치 방식을 유연하게 조정
  • 뷰 홀더 패턴을 사용하여 아이템 뷰의 재사용을 효율적으로 처리
  • 아이템 애니메이션을 지원

단점

  • ListView보다 구현 복잡
  • 초기 설정 필요
profile
성장하는 개발자

0개의 댓글

관련 채용 정보