[android] 데이터 바인딩으로 커스텀 뷰 속성바인딩

안드로이드 앱을 개발하다 보면 데이터 바인딩 라이브러리를 사용하여 화면과 데이터를 연결하고, 이를 통해 UI를 업데이트하는 것이 일반적입니다. 이때, 커스텀 뷰를 만들어 해당 뷰의 속성을 데이터 바인딩으로 연결하는 방법을 알아보겠습니다.

데이터 바인딩의 기본 개념

데이터 바인딩은 안드로이드 앱의 UI 컴포넌트와 데이터 소스(일반적으로는 앱의 데이터 모델) 사이의 바인딩을 간편하게 처리할 수 있도록 하는 라이브러리입니다. 이를 통해 UI를 업데이트하고 사용자 입력을 처리하는 데 필요한 코드를 간소화할 수 있습니다.

이제, 데이터 바인딩을 사용하여 커스텀 뷰의 속성을 연결하는 방법에 대해 알아보겠습니다.

커스텀 뷰 속성바인딩 구현하기

먼저, 커스텀 뷰를 만든 후 해당 뷰의 레이아웃 파일에 <layout> 요소를 추가하여 데이터 바인딩을 활성화합니다. 그런 다음, 레이아웃 파일에서 <data> 요소를 사용하여 데이터 클래스를 참조합니다.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="viewModel"
            type="com.example.ViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- 커스텀 뷰 추가 -->
        <com.example.CustomView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:customAttribute="@{viewModel.attribute}" />
    </LinearLayout>
</layout>

위 예제에서 app:customAttribute는 커스텀 뷰에 정의된 속성으로, 해당 속성을 데이터 바인딩으로 연결하여 viewModelattribute 속성에 바인딩하고 있습니다.

마지막으로, 커스텀 뷰 클래스에서는 데이터 바인딩 클래스를 사용하여 속성을 처리합니다.

class CustomView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {

    private val binding: CustomViewBinding = CustomViewBinding.inflate(LayoutInflater.from(context), this, true)

    fun setCustomAttribute(value: String) {
        binding.customTextView.text = value
    }
}

위 코드에서 binding.customTextView는 커스텀 뷰에서 참조하는 특정한 뷰(예: TextView)입니다. setCustomAttribute 메서드에서는 해당 뷰의 속성을 업데이트합니다.

마치며

이렇게하여 데이터 바인딩을 사용하여 커스텀 뷰의 속성을 바인딩하는 방법에 대해 알아보았습니다. 데이터 바인딩을 활용하면 UI 업데이트를 더욱 간소화하고 일반적으로 작성해야 하는 반복적인 UI 관련 코드를 줄일 수 있습니다.

참고 문헌: 안드로이드 공식 문서 - 데이터 바인딩