본문 바로가기

Android/공부

Databinding에 대해서

1. 개요

데이터와 뷰를 연결하는 작업을 레이아웃에서 처리하는 기술을 데이터바인딩이라고 부릅니다.

뷰 바인딩을 포함하는 개념이지만, 뷰 바인딩이 상대적으로 간단하며 퍼포먼스 효율이 좋고 용량이 절약된다는 이점이 있습니다. 따라서 단순히 findViewById를 대체하기 위해서라면 뷰 바인딩을 사용하는 것을 구글이 권장하고 있습니다.

2. 사용법

1) 레이아웃

먼저 바인딩할 레이아웃을 만들어줍니다.

이때 최상위 태그는 <layout>이어야 하며, 그렇지 않을 경우 에러가 발생합니다.

아래 코드처럼 layout 태그가 전체 레이아웃을 포괄해야 합니다.

<?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">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ...
        ...

2) build.gradle(app) 파일

build.gradle(app) 파일의 android 블록 안에 다음과 같은 코드를 추가합니다.

buildFeatures{
	dataBinding = true
}

만약 안드로이드 스튜디오 버전이 4.0 미만이라며 다음과 같이 해주면 됩니다.

dataBinding {
        enabled true
    }

3) 액티비티

액티비티에서 바인딩을 진행합니다.

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.user= UserProfile("K", "might")
}
}

4) 레이아웃 작성

data 태그 안에 variable을 사용해서 데이터와 뷰를 연결합니다. name에는 사용할 이름을, type에는 연결할 데이터의 경로를 적어주면 됩니다.

데이터에 접근할 때에는 @{name.OOO} 식으로 접근하면 됩니다.

아래 코드처럼 작성하면, 기존에 뷰 안에서 text를 설정했던 것처럼 화면이 나옵니다.

<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"
    tools:context=".MainActivity">

    <data>
        <variable
            name="user"
            type="com.example.tmp.UserProfile" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="50dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="50sp"
            android:text="@{user.firstName}"/>
        <TextView
            android:layout_width="wrap_content"
            android:textSize="50sp"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}"/>

    </LinearLayout>
</layout>

3. 마무리

처음 접한다면 다소 어려운 개념이지만, 사용하다보면 분명 쉽게 익숙해질 수 있습니다. 따라서 이번 시간에 잘 정리되었으면 좋겠습니다.

728x90
반응형