데이터 결합 라이브러리 Android Jetpack의 구성요소

데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식을 사용하여 레이아웃의 UI 구성요소를 앱의 데이터 소스에 결합할 수 있는 지원 라이브러리입니다.

레이아웃은 종종 UI 프레임워크 메서드를 호출하는 코드가 있는 활동에서 정의됩니다. 예를 들어 아래 코드는 findViewById()를 호출하여 TextView 위젯을 찾고 viewModel 변수의 userName 속성에 결합합니다.

Kotlin

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

Java

TextView textView = findViewById(R.id.sample_text);
textView.setText(viewModel.getUserName());

다음 예는 데이터 결합 라이브러리를 사용하여 레이아웃 파일에서 직접 위젯에 텍스트를 할당하는 방법을 보여줍니다. 이렇게 하면 위에 표시된 Java 코드를 호출할 필요가 없습니다. 할당 표현식에 사용되는 @{} 문법에 유의하세요.

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

레이아웃 파일에서 구성요소를 결합하면 활동에서 여러 UI 프레임워크 호출을 삭제할 수 있으므로 더 간단하고 쉽게 유지할 수 있습니다. 이렇게 하면 앱 성능이 향상되고 메모리 누수 및 null 포인터 예외를 방지할 수 있습니다.

데이터 결합 라이브러리 사용

다음 페이지에서 Android 앱에서 데이터 결합 라이브러리를 사용하는 방법을 알아보세요.

시작하기
Android 스튜디오의 데이터 결합 코드 지원을 포함하여 개발 환경에서 데이터 결합 라이브러리를 사용할 수 있도록 준비하는 방법을 알아보세요.

레이아웃 및 결합 표현식

표현식 언어를 사용하면 레이아웃의 뷰에 변수를 연결하는 표현식을 작성할 수 있습니다. 데이터 결합 라이브러리는 레이아웃의 뷰를 데이터 객체와 결합하는 데 필요한 클래스를 자동으로 생성합니다. 라이브러리는 레이아웃에서 사용할 수 있는 가져오기, 변수 및 include와 같은 기능을 제공합니다.

라이브러리의 이러한 기능은 기존 레이아웃과 원활하게 공존합니다. 예를 들어 표현식에서 사용할 수 있는 결합 변수는 UI 레이아웃 루트 요소의 동위 요소인 data 요소 내에서 정의됩니다. 두 요소는 모두 다음 예와 같이 layout 태그로 래핑됩니다.

<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를 새로고침할 필요가 없습니다. 변수 또는 그 속성을 식별 가능하게 만들 수 있습니다. 라이브러리를 사용하면 객체, 필드 또는 컬렉션을 식별 가능하도록 만들 수 있습니다.
생성된 바인딩 클래스
데이터 결합 라이브러리는 레이아웃의 변수와 뷰에 액세스하는 데 사용되는 결합 클래스를 생성합니다. 이 페이지에서는 생성된 결합 클래스를 사용하고 맞춤설정하는 방법을 설명합니다.
결합 어댑터
모든 레이아웃 표현식에는 상응하는 속성이나 리스너를 설정하는 데 필요한 프레임워크를 호출하는 결합 어댑터가 있습니다. 예를 들어 결합 어댑터는 setText() 메서드 호출을 처리하여 텍스트 속성을 설정하거나 setOnClickListener() 메서드를 호출하여 클릭 이벤트에 리스너를 추가할 수 있습니다. 이 페이지의 예에 사용된 android:text 속성의 어댑터와 같은 가장 일반적인 결합 어댑터를 android.databinding.adapters 패키지에서 사용할 수 있습니다. 일반적인 결합 어댑터 목록은 어댑터를 참고하세요. 다음 예와 같이 맞춤 어댑터를 만들 수도 있습니다.

Kotlin

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

Java

@BindingAdapter("app:goneUnless")
public static void goneUnless(View view, Boolean visible) {
    view.visibility = visible ? View.VISIBLE : View.GONE;
}

아키텍처 구성요소에 레이아웃 뷰 연결
Android 지원 라이브러리에는 성능이 뛰어나고 테스트와 유지관리가 쉬운 앱을 디자인하는 데 사용할 수 있는 아키텍처 구성요소가 포함되어 있습니다. 아키텍처 구성요소를 데이터 결합 라이브러리와 함께 사용하면 UI 개발을 더욱 간소화할 수 있습니다.
양방향 데이터 바인딩
데이터 결합 라이브러리는 양방향 데이터 결합을 지원합니다. 이 유형의 결합에 사용되는 표기법은 속성의 데이터 변경사항을 수신하는 동시에 해당 속성의 사용자 업데이트를 리슨하는 기능을 지원합니다.

추가 리소스

데이터 결합에 관한 자세한 내용은 다음 추가 리소스를 참고하세요.

샘플

Codelab

블로그 게시물