DataBinding은 UI 요소와 데이터를 프로그램적 방식으로 연결하지 않고 선언적 형식으로 결합할 수 있도록 도와주는 Jetpack 라이브러리의 한 기능이다.
TextView에 문자열을 넣기 위해 코틀린 코드상에서 값을 집어넣는다.
// findViewById
val textView = findViewById<TextView>(R.id.textView)
textView.text = "hello"
// ViewBinding
binding.textView.text = "hello"
코틀린 코드에는 로직만을 위한 코드를 만기고 뷰와 관련된 작업은 레이아웃 파일(XML)에 정의한다.
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewmodel.userName}" />
즉 dataBinding은 데이터와 뷰를 연결하는 작업을 레이아웃(XML)파일에서 처리하는 기술을 말한다. DataBinding을 사용하면 기존에 View 레벨에서 코드로 작성하던 것을 대부분 XML에서 처리할 수 있기 때문에 View의 코드가 깔끔해지고 유지보수가 용이해진다는 장점이 있다.
DataBinding은 ViewBinding의 역할도 수행할 뿐만 아니라 추가로 동적 UI콘텐츠 선언과 양방향 data binding도 지원한다.
ViewBinding이 DataBinding보다 성능이 좋고 용량이 절약되는 장점이 있기 때문에 단순히 findViewById를 대체하기 위해 Binidng기법을 사용한다면 ViewBinding을 사용하는 것이 좋다.
android{
...
buildFeatures {
dataBidning = true
}
}
android{
...
dataBinding {
enabled true
}
}
DataBinding을 사용하기 위해서는 layout의 구조를 변경해주어야 한다.
layout
을 루트 태그로 시작하도록 수정해준다.
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>