Abstract.
안드로이드 개발에서는 레이아웃을 담당하는 xml 파일에서 텍스트뷰, 이미지뷰, 버튼, 라디오버튼, 체크박스 등의 다양한 위젯을 구성하고 xml에서 구성한 레이아웃의 속성들을 Activity의 onCreate() 메서드에 연결해주어 실제 빌드 테스트에서 확인할 수 있도록 해준다. 기본적인 방법으로 xml의 속성들을 Java 코드에 연결한다면 속성이 10개면 10개, 100개면, 100개씩 하나하나 바인딩해야 해서 관리하기가 힘들어지는데, 이러한 불편함을 없애기 위해 처음엔 ButterKnife라는 라이브러리를 사용했다. 버터나이프를 사용하면 @ButterKnife를 이용하여 View 객체를 선언하고 사용하기 때문에 코드를 보다 간결하게 작성할 수 있어 유용하다. 하지만 훨씬 더 좋은 기능이 나왔는데, 그게 바로 DataBinding이다. DataBinding은 xml 파일에 data를 연결해 사용하기 때문에 Activity에 따로 View들을 정의하지 않아도 된다는 장점이 있다. ButterKnife보다도 훨씬 더 간결하고 편리하게 코드를 작성하여 관리할 수 있다.
DataBinding 사용 방법
DataBinding을 사용하기 위해서 다음과 같은 절차로 셋팅을 해주면 된다.
- build.gradle(Module :app)에서 databinding 사용 설정
- xml 파일에서 <layout> 태그 사용
- xml 파일이 연결된 자바코드에서 DataBinding 관련 코드 작성
1. build.gradle 설정
android {
...
dataBinding {
enabled = true
}
}
앱단의 build.gradle 파일을 열어서 android{} 안에 dataBinding { enabled = true } 코드를 작성해준다. DataBinding을 사용하기 위한 가장 기초적인 준비다.
2. activity_main.xml
<?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.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:text="DataBinding 테스트"
android:textColor="@color/purple_700"
android:textSize="20sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="databinding 테스트를 위한 예제입니다."
android:textColor="@color/black"
android:textSize="17sp" />
<CheckBox
android:id="@+id/cb_test"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginStart="20dp"
android:paddingStart="30dp"
android:text="체크박스"
android:textSize="20sp" />
<Button
android:id="@+id/btn_test"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="15dp"
android:text="저장"
android:textSize="18sp" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
xml 코드에서 가장 먼저 해야 할 것은 코드 바깥쪽을 <layout> 태그로 감싸기이다. xml 코드를 <layout> 태그로 감싸야 Activity에서 바인딩을 사용할 수 있다.
3. MainActivity.java
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// 체크박스를 바인딩하여 사용
binding.cbTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean isChecked = binding.cbTest.isChecked();
if (isChecked) {
Toast.makeText(MainActivity.this, "체크됨", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "체크 해제됨", Toast.LENGTH_SHORT).show();
}
}
});
// 버튼을 바인딩하여 사용
binding.btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "저장 완료", Toast.LENGTH_SHORT).show();
}
});
}
}
xml 코드에서 코드 바깥쪽을 태그로 감싸고 나면 자바코드에서는 activity_main.xml의 이름을 딴 ActivityMainBinding을 import 할 수 있게된다. ActivityMainBinding binding 작성을 통해 activity_main.xml의 모든 속성이 자동으로 바인딩되어 onCreate() 안에서 DataBindingUtil을 사용하여 레이아웃을 연결한 후, 따로 객체 선언 없이 binding을 통해 모든 속성이 사용 가능하다.
DataBinding 사용 결과
DataBinding을 사용하여 작성한 예제를 실행해보면 다음과 같이 정상 작동하는 것을 확인할 수 있다.

데이터바인딩을 사용하면 따로 View 객체를 선언하지 않아도 되기 때문에 데이터를 UI에 연결하기 위해 필요한 코드의 최소화 가능하다. 따라서 DataBinding을 사용했을 때 다음과 같은 장점들이 있다.
- findViewId() 작성 없이 xml에 있는 VIew 속성들을 연결할 수 있다.
- data가 바뀌어도 자동으로 View를 변경해준다.
- 코드 가독성이 좋아지고 작성해야 할 코드량이 줄어든다.
DataBinding은 MVP 패턴 또는 MVVM 패턴을 구현하기 위해 유용하게 사용되므로 안드로이드 개발에서 적극적으로 사용하도록 하자.
'Android > Android Lab' 카테고리의 다른 글
안드로이드 카드뷰(CardView) 배경색 개별 설정 (0) | 2024.04.07 |
---|---|
안드로이드 스튜디오 깃허브 연동 (1) | 2023.10.15 |
안드로이드 권한 체크 구현(Permission Check) (1) | 2023.09.19 |
안드로이드 커스텀 체크박스 구현 (0) | 2023.03.10 |
[Java] 안드로이드 간단한 설문조사 기능 구현 (0) | 2023.01.28 |
댓글