한국말로 “데이터 결합 라이브러리” 라고도 불리는 데이터 바인딩 라이브러리(Data Binding Library)는 프로그래밍적인 방식이 아니라 선언적인 방식으로 UI와 데이터를 연결시킬 수 있도록 하는 라이브러리 입니다.
데이터 바인딩 라이브러리는 Android Architecture Components의 일환으로 등장했으며, 유지보수가 쉽고, 테스트가 용이한 앱을 만드는데 도움을 주고 있습니다.
액티비티 코드에서 UI를 구성요소들은 UI 프레임워크 메서드 내에 다음과 같이 정의됩니다.
findViewById<TextView>(R.id.sample_text).apply {
text = viewModel.userName
}
다음 예시 코드는 위의 코드를 데이터 바인딩 라이브러리를 사용한 것으로 바꾼 것입니다. xml 레이아웃 파일에서 뷰에 데이터를 직접 할당할 수 있습니다. 이 방법을 사용하면 액티비티 코드에서처럼 findViewById() 호출할 필요가 없습니다.
<TextView
android:text="@{viewmodel.userName}" />
데이터 바인딩 라이브러리를 사용하면, 액티비티 코드 상에서 UI프레임워크 호출을 없앨 수 있어, 파일이 단순해지고 유지보수하기 쉬워집니다. 또한, 앱의 성능이 향상되며, 메모리 누수나 null point exception을 예방할 수 있습니다.
data
요소 내에서 정의됩니다.
data
요소는 레이아웃에서 루트 레벨에 존재하는 UI 요소와 같은 레벨에 존재해야 합니다.layout
태그로 감싸져야 합니다.<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.myapp.data.ViewModel" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
setText()
를 호출하여 텍스트 뷰에 텍스트 데이터를 설정하거나, setOnClickListener()
를 호출하여 리스너를 클릭 이벤트에 추가할 수 있습니다.android:text
속성에 대한 바인딩 어댑터와 같이, 자주 쓰이는 어댑터들은 android.databinding.adapters
패키지에서 꺼내서 사용할 수 있습니다.android.databinding.adapters
패키지에 존재하는 어댑터들은 구글의 어댑터 Git 페이지를 참조하세요.@BindingAdapter("app:goneUnless")
fun goneUnless(view: View, visible: Boolean) {
view.visibility = if (visible) View.VISIBLE else View.GONE
}
다음 포스팅에서는 본격적으로 데이터 바인딩 라이브러리를 사용하기 위한 프로젝트 환경설정에 대해서 다뤄보도록 하겠습니다.
참고: https://developer.android.com/topic/libraries/data-binding