Kotlin/개념 정리

개념 정리 : 데이터 바인딩

바보인간 2023. 2. 17. 20:11

1. 정의

데이터 바인딩은 레이아웃 XML 파일과 액티비티 또는 프래그먼트 등의 뷰 컨트롤러 코드를 연결해주는 기술이다.

데이터 바인딩을 사용하면 레이아웃 XML 파일에서 뷰와 그것에 바인딩될 데이터를 선언하고, 이를 뷰 컨트롤러 코드에서 바로 참조할 수 있다.

장점은 코드의 가독성과 유지 보수성이 향상된다는 점에 있다.

 

1-1. 데이터 바인딩? 뷰 바인딩?

언뜻 보면 비슷해 보인다. 이름도 비슷한 것이 다른 점은 어떤 것이 있을까?

 

뷰 바인딩은 XML 파일에서 정의한 모든 뷰를 각각의 바인딩 객체로 생성한다. 이 바인딩 객체는 해당 뷰와 관련된 메서드와 속성에 대한 강력한 타입 안정성을 제공한다. 뷰 바인등을 사용하면 findViewByID 같은 메서드를 사용하지 않아도 레이아웃 파일에서 정의한 모든 뷰를 간단하게 참조할 수 있다.

 

데이터 바인딩은 뷰와 데이터를 연결하는 더 복잡한 기술이다. XML 파일에서 뷰의 값이 데이터 모델과 자동으로 동기화되며, UI 업데이트가 자동으로 수행된다. 데이터 바인딩은 뷰에 바인딩할 데이터를 정의하고, 레이아웃 파일에서 해당 데이터와 뷰를 바인딩 한다. 데이터 바인딩은 뷰 바인딩보다 조금 더 복잡하지만, 뷰와 데이터를 연결하는 기능을 더 많이 제공한다.

 

사실 데이터 바인딩이 조금 더 큰 개념이고, 뷰 바인딩 기능에 동적 UI 콘텐츠 선언, 양방향 데이터 결합 등 더 다양한 기능을 제공한다. 다만, 기능이 많을 수록 속도가 좀 느려지는 것은 숙명. 단순히 findViewById 메서드를 대체하기 위한 것은 뷰 바인딩 기능을 사용하는 것이 좋다.

 

2. 사용 방법

2-1. build.gradle 파일에 의존성 추가

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

 

2-2. 레이아웃 파일에서 <layout> 태그 추가

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

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}" />

    </LinearLayout>

</layout>

"user"라는 이름의 변수를 정의하고, com.example.User 클래스를 타입으로 지정했다.

이 변수를 사용하여 TextView의 text 속성에 user 객체의 name 속성을 연결하였다.

 

2-3. 데이터 모델 클래스 정의

data class User(val name: String)

 

2-4. 데이터 바인딩 초기화

class MainActivity : AppCompatActivity() {

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

        val binding: MyLayoutBinding = DataBindingUtil.setContentView(this, R.layout.my_layout)
        binding.user = User("John")
    }

}

user에 User("John")을 넣어 실제 TextView에 John이라는 이름이 나오도록 만들었다.

 

3. 참고 사이트

 

데이터 결합 라이브러리  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 데이터 결합 라이브러리 Android Jetpack의 구성요소. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선

developer.android.com