Data Binding 라이브러리는 Programatic 방식이 아닌 선언적 형식으로 레이아웃의 UI 구성 요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리이다.

 

레이아웃은 흔히 UI FrameWork 메소드를 호출하는 코드가 포함된 Activity에서 정의된다. 

Ex) 하단 코드는 findViewById()를 호출하여 TextView 위젯을 찾아 viewModel 변수의 userName 속성에 결합한다.

    findViewById<TextView>(R.id.sample_text).apply {
        text = viewModel.userName
    }

Ex) 다음은 Data Binding 라이브러리를 사용하여 레이아웃 파일에서 직접 위젯에 텍스트를 할당하는 방법을 보여준다. 이 방법을 사용하면 상기 자바 코드를 호출할 필요가 없다. 할당 표션식에 사용되는 @{} 구문을 유의하자.

<TextView
        android:text="@{viewmodel.userName}" />

레이아웃 파일에서 구성요소를 결합하면 활동에서 많은 UI FrameWork 호출을 삭제할 수 있어 파일이 더욱 단순화되고 유지관리 또한 쉬워진다. 앱 성능이 향상되며 메모리 누수 및 null Pointer Exception을 방지할 수 있다.

Data Binding 라이브러리 사용

시작하기

Android Studio의 Data Binding 코드 지원을 비롯하여 개발 환경에서 Data Binding 라이브러리를 함께 사용하도록 준비하는 방법을 보자.

Layout 및 Binding Expression

표현식 언어로 레이아웃의 뷰와 변수를 연결하는 표현식을 작성할 수 있다. Data Binding(이하 데이터바인딩) 라이브러리는 레이아웃의 뷰를 데이터 개체와 결합하는 데 필요한 클래스를 자동으로 생성한다. 라이브러리는 가져오기, 변수 및 포함과 같이 레이아웃에서 사용할 수 있는 기능을 제공한다.

 

라이브러리의 이러한 기능은 기존 레이아웃과 원활하게 공존한다. 

Ex) 표현식에서 사용할 수 있는 결합 변수는 UI Layout 루트 요소의 동위 요소인 data 요소 내에서 정의된다. 아래 예에 나와 있는 것처럼 두 요소는 모두 layout Tag로 래핑된다.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto">
        <data>
            <variable
                name="viewmodel"
                type="com.myapp.data.ViewModel" />
        </data>
        <ConstraintLayout... /> <!-- UI layout's root element -->
    </layout>

식별 가능한 데이터 객체 작업

데이터 바인딩 라이브러리는 데이터 변경을 쉽게 식별하기 위한 클래스 및 메소드를 제공한다. 기본 데이터 소스가 변경될 때 UI 새로고침에 관해 신경쓰지 않아도 된다. 변수 또는 속성을 식별 가능하게 만들 수 있다. 라이브러리를 통해 객체, 필드 또는 컬렉션을 식별 가능하게 만들 수 있다.

생성된 바인딩 클래스

데이터 바인딩 라이브러리는 레이아웃의 변수 및 뷰에 엑세스하는 데 사용되는 결합 클래스를 생성한다.

바인딩 어뎁터

모든 레이아웃 표현식에는 속성 또는 리스너를 설정하는 데 필요한 프레임워크를 호출하는 바인딩 어댑터가 있다. 

Ex) 바인딩 어댑터는 setText() 메소드를 호출하여 텍스트 속성을 설정하거나 setOnClickListener() 메소드를 호출하여 리스너를 클릭 이벤트에 추가할 수 있다. 

    @BindingAdapter("app:goneUnless")
    fun goneUnless(view: View, visible: Boolean) {
        view.visibility = if (visible) View.VISIBLE else View.GONE
    }

Architecture Component Layout View 연결

Android 지원 라이브러리에는 성능이 뛰어나고 테스트와 유지관리가 쉬운 앱을 디자인하는 데 사용할 수 있는 AAC가 포함되어 있다.

AAC와 DataBinding 라이브러리와 함께 사용하여 UI 개발을 한층 단순화할 수 있다.

양방향 데이터 바인딩

데이터 바인딩 라이브러리는 양방향 데이터 바인딩을 지원한다. 이 바인딩 유형에 사용된 표기법은 속성의 데이터 변경사항을 받는 동시에 속성의 사용자 업데이트를 수신 대기하는 기능을 지원한다.

 

시작하기

데이터 바인딩 라이브러리는 유연성과 광법위한 호환성을 모두 제공하는 지원 라이브러리이며 Android 4.0(API Level 14) 이상을 실행하는 기기에서 사용할 수 있다.

최신 Gradle용 Android Plugini을 프로젝트에 사용하는 것이 좋다. 그러나 데이터 바인딩은 버전 1.5.0 이상에서 지원된다.

빌드 환경

데이터 바인딩을 시작하려면 Android SDK Manager의 지원 저장소에서 라이브러리를 다운로드 하자.

데이터 결합을 사용하도록 앱을 구성하려면 아래 예에 나와 있는 것처럼 앱 모듈에서 dataBinding 요소를 build.gradle 파일에 추가하자.

android {
        ...
        dataBinding {
            enabled = true
        }
    }
    

Android Studio의 데이터 바인딩 지원

Android 스튜디오는 다수의 데이터 바인딩 코드 편집 기능을 지원한다. 예를 들어 데이터 바인딩 표현식과 관련하여 다음 기능을 지원한다.

1. 구문 강조 표시

2. 표현식 언어 구문 오류 플래그 지정

3. XML 코드 완성

4. 탐색 및 빠른 문서 포함 참조

 

Layout Editor의 Preview 창에는 데이터 바인딩 표현식의 기본값(제공된 경우)이 표시된다.

Ex) Preview 창에는 다음 예에서 선언된 TextView 위젯의 my_default 값이 표시된다.

 

<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{user.firstName, default=my_default}"/>
    

 

+ Recent posts