데이터바인딩 라이브러리
선언적 형식으로 레이아웃의 UI구성요소를 앱의 데이터 소스와 결합할 수 있는 support library이다.
이 라이브러리를 사용하기 전에는 액티비티에서 UI 프레임워크 메소드들을 호출해서 레이아웃과 바인딩하는 방식이었다.
가령 아래 코드와 같이 findViewById()를 호출해 TextView 위젯을 찾아서 viewModel 변수의 userName 속성과 바인딩하는 과정을 거쳤다면
TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());
데이터 바인딩 라이브러리를 사용하면 레이아웃 파일에서 직접 textView를 할당할 수 있으므로 엑티비티에서 자바/코틀린 코드로 따로 호출할 필요가 없다.
<TextView
android:text="@{viewmodel.userName}" />
그리고 무엇보다 액티비티가 아니라 레이아웃에서 view를 바인딩하면 액티비티에서 빈번하게 이루어지던 UI 프레임워크 호출 (findById와 같은)을 하지 않아도 되니까 코드가 단순화되고 유지보수가 쉬워진다.
(메모리 누수 및 null pointer Exception 방지 가능)
<CheckBox
android:id="@+id/checkBox3"
android:layout_width="102dp"
android:layout_height="31dp"
android:layout_marginTop="168dp"
android:layout_marginEnd="8dp"
android:onClick="@{activity::onCheckedBoxClicked}"
android:text="CheckBox3"
app:layout_constraintEnd_toStartOf="@+id/checkBox4"
app:layout_constraintStart_toEndOf="@+id/checkBox2"
app:layout_constraintTop_toBottomOf="@+id/radioGroup" />
// checkBox check 여부 확인
fun onCheckedBoxClicked(view : View) {
var checked = view as CheckBox
if (view.isChecked)
checkedLog = checked.text.toString() + " 활성 "
else
checkedLog = checked.text.toString() + " 비활성"
}
나중에 사용할 일이 있으면 그때 정리
https://black-jin0427.tistory.com/134
덧)
DataBinding에서 View에 Data를 Binding 하는 기능을 제외한 View의 접근만 가능한 기능이 바로 ViewBinding
그냥 findByID() 기능만 한다고 볼 수 있다.