APP/안드로이드프로그래밍

Android ListView 와 RecyclerView 특징과 차이점

헬로월드! 2021. 1. 13. 17:12

Layout 과 Container 

Layout은 위젯의 위치를 다루는 것이였다면 , Container 는 위젯이나 다른 레이아웃에 데이터를 동적으로 표현할 때 사용된다. Container 를 사용하는 대표적인 예로 목록을 화면에 출력할 때 사용하는 RecyclerView 가 있다.

컨테이너는 레이아웃과 다르게 내부 요소의 위치를 결정할 수 있는 속성이 없으므로 컨테이너를 사용할 때는 다른 레이아웃을 컨테이너 안에 삽입해서 사용한다. 

 

ListView 와 RecyclerView의 차이 

모바일 단말에서 가장 많이 사용되는 UI ⇒ 리스트

안드로이드에서 리스트 형태로 보여주는 것은 ListView 와 RecyclerView 가 있는데 둘의 차이는 다음과 같다.

  RecyclerView ListView
ViewHolder ViewHolder 패턴 이용 ViewHolder 패턴 이용할 필요 X
Item Layout 가로/세로/지그재그 모두 지원 세로만 지원
Item Animation 아이템 애니메이션 처리 클래스 O 아이템 애니메이션 처리 클래스 X 
Adapter 데이터 제공을 위해 직접 구현 다양한 소스에 대한 어댑터 존재
Decoration 많은 구분선 설정  쉽게 구분 가능
Click Event 개별 터치 이벤트 관리O, 클릭 처리 기능 X  클릭 이벤트에 바인딩 하기위한 인터페이스 존재

 

** 보통 안드로이드 스튜디오 3.1 부터는 리사이클러뷰를 사용한다. 

→ 이전에는 리스트 모양으로 보여줄 때 리스트뷰를 사용했지만, 리싸이클러뷰가 더 많은 장점을 가지고 있기 때문에 리싸이클러뷰 를 권장한다.

→ 기존의 ListView 는 커스터마이징 하기 힘들다.

 

 

  • RecyclerView 란

 인스타그램, 유튜브 피드, 전화번호부 등과 같이 동일한 형태의 뷰의 데이터에 따라서 달라지는 형태 뷰를 재활용 (recycle) 하는 뷰 

→ 새로운 ViewGroup으로 ListView 와 GridView 의 기능을 제공한다.

→ 가로, 세로 레이아웃 모두 구현 가능 !

→ 표시될 데이터와 아이템 레이아웃을 어댑터에서 연결해주므로 어댑터에서 어떤 아이템 레이아웃을 사용하는지에 따라 표시되는 모양을 다르게 구현할 수 있다.( 원본 데이터를 뷰에 직접 설정하지 않고 어댑터라는 클래스를 사용한다.)

 

무엇이 필요할까?

  1. 어떤 형태로 들어갈 것인지 (Layout 배치, 형태)

  2. 어떤 데이터가 들어갈지 (데이터 형태)

  3. 어디에 어떤 데이터가 들어갈지 ( ViewHolder)

  4. 리싸이클러뷰에 어떻게 데이터를 연결 시킬지 (Adapter)

 

  • RecyclerView 주요 클래스

  1. Data : 데이터의 값을 저장하는 클래스

  2. LayoutManager: 아이템의 항목을 배치

  3. ViewHolder : 데이터 값에 따라 변경되어 보여질 뷰

Adapter에 의해 생성되며 미리 생성된 뷰홀더 객체가 있는 경우 새로 생성하지 않고 이미 만들어져있는 뷰홀더를 재사용한다. 이때 데이터가 뷰홀더의 아이템뷰에 바인딩 된다.

내가 넣고자 하는 데이터를 실제 레이아웃과 연결시키는 기능이다.

기존 리스트뷰를 이용했을 때는 ViewHolder 라는 개념이 없었고 뷰를 inflate해서 사용해야했다. 따라서 레이아웃의 요소를 가져오려면 하나씩 findViewById 를 해줘야한다는 단점이 !!!!

성능 저하 단점을 해결가능하게 한다.

 

4. Adapter : 데이터와 아이템에 대한 뷰를 생성해주는 기능 → 데이터 관리, 뷰 객체 관리

한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다.

어댑터를 사용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수있다. 한국 표준 플러그를 유럽 전원 소켓에 바로 끼워줄 수 없어서 어댑터를 이용하는 것 처럼 !

원본 데이터는 어댑터에 설정해야하며 어댑터가 데이터 관리 기능을 담당한다.

아이템이 화면에 디스플레이 되기 전 → getView() 메서드가 호출된다.

getView 메서드는 어댑터에서 가장 중요한 메서드로 이 메서드에서 반환하는 뷰가 하나의 아이템으로 디스플레이 된다.

  • onCreateViewHolder(ViewGroup parent, int viewType) : 뷰 홀더를 생성하고 붙여주는 부분
  • onBindViewHolder(ListItemViewHolder holder, int position):

재활용 되는 뷰가 호출하여 실행되는 메소드, 뷰 홀더를 전달하고 어댑터는 position의 데이터를 결합시킨다.

  • getItemCount() : 데이터의 개수를 반환한다.

 

RecyclerView.Adapter  |  Android 개발자  |  Android Developers

 

RecyclerView.Adapter  |  Android 개발자  |  Android Developers

RecyclerView.Adapter public static abstract class RecyclerView.Adapter extends Object Base class for an Adapter Adapters provide a binding from an app-specific data set to views that are displayed within a RecyclerView. Summary Nested classes enum Recycler

developer.android.com