[kotlin] 리사이클러뷰(RecyclerView)와 아키텍처 컴포넌트의 결합

안녕하세요! 이번 글에서는 안드로이드 앱에서 리사이클러뷰와 아키텍처 컴포넌트를 함께 사용하는 방법에 대해 알아보겠습니다. 리사이클러뷰는 안드로이드 앱에서 여러 아이템을 나열하고 표시하기 위한 강력한 도구이며, 뷰와 데이터를 바인딩하는 아키텍처 컴포넌트는 앱의 데이터 관리를 단순화하는데 도움을 줍니다.

1. 리사이클러뷰의 기본 설정

먼저, 리사이클러뷰를 앱에 추가하고 기본적인 설정을 해야 합니다. 이를 위해 RecyclerView 위젯을 XML 레이아웃 파일에 추가하고, 어댑터(Adapter)와 레이아웃 매니저(LayoutManager)를 정의해야 합니다.

activity_main.xml

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

그리고 이제 어댑터와 레이아웃 매니저를 설정합니다.

MainActivity.kt

val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
val adapter = MyAdapter()
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)

2. 아키텍처 컴포넌트의 연동

아키텍처 컴포넌트는 ViewModel, LiveData, 및 Observer 등의 요소들로 구성되어 있습니다. 이 요소들을 사용하여 데이터를 관리하고 화면 갱신을 처리할 수 있습니다.

MyViewModel.kt

class MyViewModel : ViewModel() {
    private val _data = MutableLiveData<List<Item>>()
    val data: LiveData<List<Item>> get() = _data

    init {
        loadData()
    }

    private fun loadData() {
        // 데이터를 불러오는 로직
        _data.value = repository.loadData()
    }
}

class MyAdapter : RecyclerView.Adapter<MyAdapter.ViewHolder>(), Observer<List<Item>> {
    override fun onChanged(data: List<Item>?) {
        // 데이터가 변경될 때마다 호출되는 로직
        notifyDataSetChanged()
    }
}

위 코드에서 MyViewModel은 데이터를 관리하고 MyAdapter는 데이터의 변화를 감지하여 화면을 갱신합니다.

3. 데이터 바인딩

마지막으로, 리사이클러뷰와 아키텍처 컴포넌트를 연결하기 위해 데이터 바인딩을 설정해야 합니다.

MyAdapter.kt

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val item = getItem(position)
    holder.bind(item)
}

inner class ViewHolder(private val binding: ItemBinding) : RecyclerView.ViewHolder(binding.root) {
    fun bind(item: Item) {
        binding.item = item
        binding.executePendingBindings()
    }
}

위 코드에서 ViewHolder 내부에서 binding을 활용하여 데이터를 뷰에 바인딩합니다.

이제 리사이클러뷰와 아키텍처 컴포넌트를 함께 사용하기 위한 기본적인 설정이 마무리되었습니다. 이를 토대로 앱의 데이터 관리와 화면 갱신을 보다 간단하게 처리할 수 있을 것입니다. 감사합니다!