#1 View Binding
#1-1 개요
뷰 바인딩은 데이터 바인딩의 부분집합으로, XML에서 @{ ... } 및 @={ ... }가 없는 데이터 바인딩이라고 보면 된다. 즉, View Binding은 findViewById의 암시적 선언만을 수행하는 작업이다.
#1-2 View Binding의 장점
1. 프로젝트 컴파일 시간이 짧음
2. xml 코드를 <layout> 태그로 감쌀 필요가 없음 (= Binding할 View(XML 코드)를 일절 건들지 않아도 됨)
따라서, @{ ... } 및 @={ ... }이 쓰이지 않은 데이터 바인딩 코드라면, Data Binding을 View Binding으로 전환할 수 있다.
#2 View Binding 사용하기
#2-1 View Binding을 적용할 샘플 앱
Data Binding이 쓰인 위 게시글의 프로젝트를 View Binding으로 전환해보겠다.
#2-2 build.gradle.kts (모듈 수준) 수정
plugins {
...
}
android {
...
buildFeatures {
viewBinding = true
}
}
dependencies {
...
}
dataBinding = true 구문을 제거하고, 대신 viewBinding = true를 추가한다.
#2-3 activity_main.xml 수정
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
...
</androidx.constraintlayout.widget.ConstraintLayout>
<layout> 태그를 제거한다.
#2-4 MainActivity.kt 수정
// package com.example.viewbindingbasics
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.viewbindingbasics.databinding.ActivityMainBinding
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 = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.apply {
myButton.setOnClickListener {
myTextView.text = myEditText.text
}
}
}
}
DataBindingUtil을 이용하는 대신 ActivityMainBinding.inflate()로 View를 구성한다.
#3 작동 확인
#4 요약
View Binding은 @{ ... } 및 @={ ... }이 없는 Data Binding이다.
#5 완성된 앱
'깨알 개념 > Android' 카테고리의 다른 글
[Android] Jetpack Compose - 기초 (0) | 2024.07.22 |
---|---|
[Android] Dagger2 - Hilt로 마이그레이션 (0) | 2024.07.12 |
[Android] Unit Testing - Retrofit (0) | 2024.07.08 |
[Android] Unit Testing - Room과 LiveData (0) | 2024.07.08 |
[Android] Unit Testing - ViewModel (0) | 2024.07.08 |