티스토리 뷰
❓RecyclerView
많은 양의 데이터를 효율적으로 스크롤하면서 보여줄 수 있는 뷰이다.
- 기존의 Listview보다 성능과 유연성이 뛰어니다.
- View를 재활용해서 메모리 낭비를 줄인다.
- 데이터가 변경되면 Adapter를 통해 화면을 업데이트한다.
❓ RecyclerView와 ListView
RecyclerView처럼 ListView도 재활용은한다. 하지만 ListView는 뷰를 재활용할 때 getView메서드의 convertView를 이용해서 직접 수동으로 관리해주어야하지만 RecyclerView는 내부적으로 ViewHolder 패턴을 강제 적용해서 최적화를 해준다.

❓Adapter
기본적으로 데이터와 뷰의 연결 역할을 하는 클래스이기 때문에, 어떤 뷰에 데이터 리스트를 표시하고자 할 때 쓰인다.
- ListView
- GridView
- Spinner
- ViewPager 등
❓RecyclerView.Adapter class
🙌 필수 메서드(override)
- onCreateViewHolder
- ViewHolder를 만들어서 반환한다.
- RecyclerView의 아이템 레이아웃(XML)을 inflate해서 ViewHolder에 담아서 반환한다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return MyViewHolder(itemView)
}
- onBindviewHolder
- ViewHolder에 데이터를 바인딩한다.
- position을 통해 어떤 데이터 항목을 표시할지 결정한다.
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = data[position]
holder.bind(item)
}
- getItemCount
- 전체 데이터 항목의 수를 반한한다.
- 데이터의 개수를 반환해서 Recyclerview가 얼마나 많은 항목을 표시할지 알 수 있게 한다.
override fun getItemCount(): Int {
return data.size
}
🖥️ 전체 코드 예시
class MyAdapter(private val data: List<MyItem>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
// ViewHolder 클래스 정의
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val title: TextView = itemView.findViewById(R.id.title)
private val description: TextView = itemView.findViewById(R.id.description)
fun bind(item: MyItem) {
title.text = item.title
description.text = item.description
}
}
// onCreateViewHolder - ViewHolder 생성
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false)
return MyViewHolder(itemView)
}
// onBindViewHolder - 데이터 바인딩
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = data[position]
holder.bind(item)
}
// getItemCount - 데이터 개수
override fun getItemCount(): Int {
return data.size
}
}
끗.
'안드로이드' 카테고리의 다른 글
| LifeCycle Of ViewModel (1) | 2025.10.05 |
|---|---|
| Android Thread 통신과 Handler·Looper (4) | 2025.08.29 |
| DataBinding, BindingAdapter를 사용할 때 무한루프 (2) | 2025.08.02 |
| ViewModel Test (7) | 2025.07.27 |
| 안드로이드 컴포넌트 (0) | 2024.07.29 |