티스토리 뷰

프로그래밍/Android

Data Binding 사용법

Bㅇㅇker 2024. 8. 26. 19:56
반응형

findViewById를 사용 안하는 방법이 없을까? 안드로이드 개발을 초창기부터 해오신 분들은 이런 고민을 많이 했을 것입니다. 이런 고민을 Android 을 사용하는 개발자 뿐만 아니라 Google 조차 이 부분을 고민하였고 개발자의 편의를 위한 노력을 하였습니다.

그렇다면 요즘 대표적 사용하는 패턴은 무엇일까요? 대표적으로는 Data Binding 이 있습니다. 이번 시간은 대부분의 개발자들이 알고 있을 수 있으나, 사용할 때 한번씩 검색할 수도 있는(?) Data Binding 사용법을 알아보겠습니다.

 

 

Data Binding 설정 방법

Data Binding을 사용하려면 APP build.gradleDataBinding 사용 한다는 것을 명시해야합니다.

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

 

 

Activity Binding

Activity 에서 binding 을 쉽게 할 수 있도록 DataBindingUtil을 제공하고 있습니다. Activity의 binding은 DataBindingUtil.setContentView을 사용하면 binding 할 수 있습니다.

binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

 

Fragment Binding

 

Fragment 에서도 binding 을 쉽게 할 수 있도록 DataBindingUtil을 제공하고 있습니다. DataBindingUtil.inflate을 사용하면 Binding 할 수 있습니다.

binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)

 

View Binding

RecyclerView의 Row View와 같이 View를 사용하는 곳에서 Binding 을 하는 방법입니다.

inflate 로 해당 View에 대한 정보를 갖고 오고 DataBindingUtil.build(View) 을 통해서 View Binding 처리하는 것을 확인 할 수 있습니다.

View view = LayoutInflater.from(mContext).inflate(R.layout.view_component, null);
setContentView(view);
mBinding = DataBindingUtil.bind(view);

 

XML Data Obserbing 을 통한 UI 변경

Databinding Value를 xml 연결 시 연결한 Value를 observing 할 수 있습니다. 그러면obserbing 으로 설정된 Value가 변경 시 event를 받게되며 event value 값을 통해 UI를 실시간으로 변경 가능합니다.

class SampleActivity extends Activity {
  ...
 @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
		mBinding.setView(this);
	...
}

 

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>

    <import type="android.view.View" />

    <variable
        name="view"
        type="com.test.sampe.SampleActivity" />

    <variable
        name="isValid"
        type="java.lang.Boolean" />
</data>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  
  ...
    
  <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:visibility="@{isValid ? View.VISIBLE : View.GONE}"
        android:background="@android:color/black" />
        
  ...

 

 

마무리

Data Binding 를 하는 방법을 간단히 알아봤습니다. Data Binding으로 java 또는 kotlin 코드에서 xml 에 있는 리소스를 가져오는 방법을 알아봤는데요.

gradle 환경이 올라가며 xml에서 binding 지원하는 기능이 축소 되었습니다. 그려먼서 안드로이드 디벨로퍼에서는 binding 을 사용하는 것보다 compose를 사용할 것을 가이드하고 있는데요. 앞으로 xml 로 개발하는 것보다 compose로 UI 구성하는 것이 표준으로 잡을 것으로 예상됩니다.

아직은 xml로 작성된 레거시 코드가 많고, 시니어 개발자는 xml 이 익숙하여 쉽게 compose 로 넘어가지는 않을거 같습니다. 아직은 유효한(?) Data Bidning을 프로젝트 특성에 맞게 잘 사용하면 좋겠습니다.

 

 

반응형
댓글