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
'Kotlin > 개념 정리' 카테고리의 다른 글
| 개념 정리 : 뷰 모델 (0) | 2023.02.17 |
|---|---|
| 개념 정리 : 라이브 데이터(Live Data) (0) | 2023.02.17 |
| 개념 정리 : 뷰 바인딩 (0) | 2023.02.17 |
| 개념 정리 : 코루틴 (0) | 2023.02.17 |
| 개념 정리 : ViewPager - 기본 (0) | 2023.02.16 |