깨알 개념/Android

[Android] Data Binding - View Binding

interfacer_han 2024. 7. 10. 02:02

#1 View Binding

#1-1 개요

 

뷰 결합  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합은 뷰와 상호작용하는 코드를 더 쉽게 작성할

developer.android.com

뷰 바인딩은 데이터 바인딩의 부분집합으로, 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을 적용할 샘플 앱

 

[Android] Data Binding - 기초

#1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이 앱의 코드는 다음과 같다. #1-2 activity_main.xml #1-3 Main

kenel.tistory.com

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-practice/data-binding/ViewBindingBasics at master · Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com