-
리스트 모양으로 보여줄 수 있는 위젯으로 리사이클러뷰(RecyclerView)가 있다. 리사이클러뷰는 기본적으로 상하 스크롤이 가능하지만 좌우 스크롤도 만들 수 있다. 왜냐하면 처음 만들어질 때부터 레이아웃을 유연하게 구성할 수 있도록 설계되었기 때문이다. 그리고 이름에서 살펴볼 수 있듯이 뷰 객체를 '재활용(Recycle)'한다는 느낌 그대로 각각의 아이템이 화면에 보일 때 메모리를 효율적으로 사용하도록 캐시(Cache) 메커니즘이 구현되어 있다.
캐시 메커니즘?
기술의 발전으로 프로세서 속도는 빠르게 증가해온 반면, 메모리의 속도는 이를 따라가지 못했다. 프로세서가 아무리 빨라도 메모리의 처리 속도가 느리면 결과적으로 전체 시스템 속도는 느려진다. 이를 개선하기 위한 장치가 바로 캐시(Cache)다.
저번 포스트의 주제인 리스트뷰와 리사이클러뷰의 차이점
액티비티에 리사이클러뷰 추가
액티비티에 리사이클러뷰를 추가하는 방법은 간단하다. 좌측 상단의 팔레트에서 RecyclerView를 끌어다 화면에 놓으면 된다.
모델 클래스 정의
아이템 뷰 레이아웃 추가
리사이클러뷰의 아이템 뷰 레이아웃을 생성한다. 여기서는 사용자의 프로필을 나타내는 이미지뷰와 이름, 전화번호를 나타내는 텍스트뷰를 추가했다.
뷰홀더(ViewHolder)
이름에서 느낌이 오듯 뷰홀더는 간단히 말하면 뷰를 보관하는 객체이다. 아래에서 뷰홀더의 역할을 좀 더 자세히 살펴보자.
리스트뷰와의 차이점
리사이클러뷰의 조상 격인 리스트뷰에서는 스크롤을 하는 동안 상단이나 하단에 표시될 뷰 객체를 새롭게 생성하고 빈번하게 findViewById()를 호출하여 성능 저하가 일어났다.
안드로이드 팀에서는 이러한 반복 호출을 피하기 위해 뷰홀더 패턴을 사용하길 권장해왔으며 강요는 하지 않았지만, 리사이클러뷰는 뷰홀더 패턴의 사용을 강제하여 성능 저하 문제를 방지하고 있다고 한다.
뷰 객체의 재활용
리사이클러뷰에 보이는 여러 개의 아이템은 내부에서 캐시되기 때문에 아이템 개수만큼 객체로 만들어지지는 않는다. 예를 들어, 아이템이 천 개라고 하더라도 이 아이템을 위해 천 개의 뷰 객체가 만들어지지 않는다. 메모리를 효율적으로 사용하려면 뷰홀더에 뷰 객체를 넣어두고 사용자가 스크롤하여 보이지 않게 된 뷰 객체를 새로 보일 쪽에 재사용하는 것이 효율적이기 때문이다. 이 과정에서 뷰홀더가 재사용된다.
위의 그림에서 12번째 아이템을 화면에 표시하기 위해 findViewById() 메서드를 일일이 호출하여 레이아웃에 데이터를 바인딩하지 않고, 기존에 사용했지만 지금은 쓰이지 않는 뷰를 재활용하여 이미 만들어진 것에 데이터를 바인딩한다.
'Android' 카테고리의 다른 글
안드로이드 프래그먼트 간 데이터 전달 (0) 2022.08.19 파이어베이스 데이터 읽기 (0) 2022.08.17 리스트뷰와 어댑터 (0) 2022.08.13 텍스트 입력 이벤트 처리 (0) 2022.08.10 플로팅 액션 버튼 (0) 2022.08.09