본문 바로가기

안드로이드/[Kotlin]

[Kotlin] View Binding (뷰 바인딩)

예전에는 xml 파일의 뷰들과 연결하기 위해 findViewById를 사용했다. (물론 지금도 사용 가능하긴 함)

Kotlin을 사용할 땐 Kotlin-android-extensions을 사용할 수 있었는데, 서로다른 xml파일에서 동일한 id 를 사용할 경우 코드가 헷갈리는 경우가 많은 등의 이유로 올해부터 지원이 중단된다고 한다.

그래서 구글에서는 Android Studio 4.1 버전부터 View binding을 사용하도록 안내하고 있다.

 


View Binding 이란??

View binding을 활성화 하면 각 XML 파일에 대한 바인딩 클래스가 생성이 된다. 바인딩 클래스의 인스턴스를 통해서 view에 접근할 수 있고, 레이아웃에 ID가 있는 view를 참조할 수 있다.

다시 설명하자면 View binding은 findViewById를 사용하지 않고 object에 xmll view 컴포넌트의 ID를 찾아서 inflate 해 준다. ( ViewBinding은 XML layout을 위해서 binding 할 object를 생성한다.

 

 

바인딩 클래스는 자동으로 생성이 되는데, 이름이 만들어지는 기준이 있다.

  1. Pascal case(첫 글자 대문자) + Camel case(단어 단위로 첫 글자 대문자)
  2. 파일 이름 끝에 Binding 이라는 단어가 붙는다.

==>ex)  activity_main.xml   -->  ActivityMainBinding

 

 

 

View binding을 활성화 하기 위해서는 간단한 코드 추가가 필요하다.

 

build.gradle 파일에 아래 코드를 추가하자.

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

 


View binding 사용예시

 

//EditText에 아이디를 입력하고, button을 클릭하면 TextView의 글이 변경되는 코드

package com.example.textviewkt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.textviewkt.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding           // 1.

    override fun onCreate(savedInstanceState: Bundle?) { //앱이 최초로 실행될 때 수행되는 구문

        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)   //  2.
        setContentView(binding.root)                            //  3.
        
        binding.btnGetText.setOnClickListener {
            val title = binding.etId.text.toString()
            binding.tvResult.text = title
        }
    }
}

 

  •  View binding을 활성화 했기 때문에 레이아웃 xml파일에 대해 ActivityMainBinding 이라는 클래스가 자동으로 생성이 된다.
  •  1, 2, 3 과정을 통해 binding 바인딩 변수를 활용하여 마음껏 해당 xml 파일 내의 뷰 id 접근이 가능해진다. (binding 객체에 각 뷰의 id가 property로 제공된다)
  •  여기서 xml파일의 뷰 id도 네이밍규칙 적용으로 인해서  btn_getText -> btnGetText 로 자동으로 변환된다.