[Android] 뷰홀더 패턴

Jay·2021년 3월 12일
0

Android

목록 보기
22/39
post-thumbnail
post-custom-banner

ViewHolder

  • 각 뷰를 보관하는 holder 객체를 의미하며 이는 recyclerview 그리고 listview에서 사용된다.

ViewHolder 객체는 레이아웃의 태그 필드 안에 각 구성 요소 뷰를 저장하므로 반복적으로 조회하지 않고도 즉시 엑세스가 가능하다.

10개의 데이터를 리스트 뷰로 나타내면 빠른 속도로 나타난다.
이를 1000000개의 데이터를 가진 리스트를 생각해보자.

리스트 뷰로 표현한다면 매번 findViewById()를 호출할 때 매우 큰 비용이 들기 시작한다.

직접 해보면 더 도움이 되겠지만, 스크롤을 내릴 때 많은 비용을 요구하고 결국 속도 저하가 나타난다.

즉, 리스트뷰에서 스크롤하는 동안 findViewById()를 자주 호출해서 성능이 낮아질 수 있다.
이를 재활용하기 위해 inflate된 뷰를 반환하는 경우에도 findViewById()로 요소를 찾아보고 업데이트 해야한다.
findViewById()를 반복 호출하는 경우 뷰홀더 패턴을 사용할 수 있다.

그래서 뷰폴더 패턴이 나타났다!

뷰홀더 패턴

  • 반복되는 findViewById() 호출을 막을 수 있다.
  • ViewHolder 객체는 레이아웃의 태그 필드 안에 각 구성 요소 뷰를 저장하므로 반복적으로 조회하지 않고도 즉시 엑세스가 가능하다.

inflate ?

  • xml에 쓰여있는 view의 정의를 실제 view 객체로 만드는 역할을 수행한다.(성능 상 문제로 컴파일 타임에 존재하는 xml에 대해서만 적용 가능하다)

리사이클러 뷰에서 아래 3가지의 메서드는 필수 오버라이딩해야 한다.

onCreateViewHolder

  • ViewHolder 객체 생성

onBindViewHolder

  • ViewHolder에 데이터를 넣는 작업을 수행

getItemCount

  • data의 갯수를 반환해준다.

RecyclerView를 구현해보자.

RecyclerView를 사용하려면 2가지가 필수로 필요하다.

  1. Adapter
  • list를 리사이클러 뷰에 바인딩 시켜주기 위한 사전 작업이 이루어지는 객체이다.
  1. LayoutManager
  • 스크롤을 어느 식으로 할지 결정?
profile
developer
post-custom-banner

0개의 댓글