- ViewBinding이 제공하는 기능 뿐만 아니라, UI 요소와 데이터를 프로그램적 방식으로 연결하지 않고, 선언적 형식으로 결합할 수 있게 도와주는 라이브러리이다.
- 레이아웃 파일과 코드 간에 일치하지 않아 발생하는 문제를 컴파일 타임에 확인하며, 뷰의 직접 참조를 제공한다. 그래서 런타임 오류를 줄이고, Null Safety와 Type Safety를 제공하여 안정성을 높인다.
DataBinding을 사용하면 좋은 점
- 뷰를 참조하거나 UI 업데이트를 위해 별도의 코드를 작성할 필요가 없어 코드가 더 간결해진다.
- UI와 관련된 로직이 XML 레이아웃 파일에 직접 표현되므로, UI와 비즈니스 로직이 분리된다. (단방향 데이터 바인딩)
<data>
<variable
name="viewModel"
type="com.example.UserViewModel" />
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.user.name}" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Update Age"
android:onClick="@{() -> viewModel.updateUserAge(30)}" />
- 양방향 데이터 바인딩도 지원하여 사용자의 입력이 모델에 반영되고, 모델의 변경이 자동으로 UI에 반영된다.
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.user.name}" />
레이아웃 표현식?
- 레이아웃 파일에서 변수나 바인딩 표현식 등을 사용하여 UI 구성 요소에 동적으로 데이터를 바인딩하는데 사용된다.
- 표현식 : 데이터를 가공하거나 특정 기능을 구현하기 위해 사용되는 식
단방향 데이터 바인딩?
- UI가 데이터의 변화를 반영하지만, UI의 사용자 입력이 직접적으로 데이터 모델에 반영되지 않는다.
- 즉, 데이터 모델의 변경이 UI에 반영되는 한 방향으로의 데이터 흐름을 의미한다.
양방향 데이터 바인딩의 단점
- UI가 데이터 모델에 직접적으로 영향을 미치게 되면 UI와 데이터 모델 사이의 의존성이 높아진다. 따라서 데이터 모델이 UI 로직에 의해 변경될 가능성이 높아지고, 이로인해 예기치 않은 부수 효과가 발생할 수 있다.
- 데이터의 변경이 어디에서 발생했는지 파악하기 어려워질 수 있다. 즉, 디버깅이 어려워질 수 있다.
UI와 데이터 모델 간의 의존성이 높아지면 안되는 이유
- 새로운 기능을 추가하거나 기존 코드를 수정할 때, 코드를 변경하기 어려워질 수 있다.
- UI와 데이터 모델을 동시에 변경해야 하는 경우도 생길 수 있다.
- 다른 UI에서 동일한 데이터 모델을 사용하기 어려워져 코드의 재사용성이 감소한다.
viewBinding vs dataBinding
- viewBinding은 어노테이션을 처리하는 과정이나 태그가 붙은 XML 레이아웃 파일이 필요 없기 때문에 dataBinding보다 컴파일 속도가 더 빠르다.
- dataBinding은 XML 레이아웃 파일에서 동적 UI 콘텐츠를 직접 선언하거나, 양방향 데이터 바인딩을 사용하는 것을 지원한다.