안드로이드 코틀린 뷰바인딩(viewBinding) 사용하기
뷰바인딩(View Binding)
뷰바인딩은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법이다. 안드로이드 UI를 구성할 때 대부분 레이아웃 XML 파일을 이용한다.
레이아웃 XML에 등록한 뷰는 findViewById() 함수를 이용해 사용한다.
하지만 뷰가 많고, 뷰를 대부분 코드에서 사용하기에 매번 findViewById() 함수로 작업하는 건 매우 귀찮고 무의미한 반복 작업이라서 뷰바인딩을 사용한다.
안드로이드 코틀린 뷰바인딩을 사용하는 방법에 대해서 알아보자
Gradle에 뷰바인딩 설정하기
build.gradle 파일 android 영역에 buildFeatures를 선언한다.
android {
(... 생략 ...)
buildFeatures {
viewBinding true
}
}
Sync Now 를 클릭하면 레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다.
자동으로 생성된 클래스는 기존 코드에서 뷰를 선언하고 findViewById() 함수를 호출하는 기능을 구현하는 클래스다. 우리는 이렇게 만들어진 클래스를 이용해 뷰를 사용하면 된다.
자동으로 만들어지는 클래스 이름은 레이아웃 XML 파일명으로 만들어진다. 첫 글자는 대문자, 밑줄(_)은 빼고 그 뒤에 오는 단어를 대문자로 만든 후 Binding을 추가한다.
예를 들어 activity_main.xml → ActivityMainBinding 이렇게 만들어진다.
코드에서 바인딩 객체 이용하기
자동으로 만들어진 클래스의 inflate() 함수를 호출해서 바인딩 객체를 얻는다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
//Binding 객체 획득
val binding = ActivityMainBinding.inflate(layoutInflater)
//Activity 화면 출력
setContentView(binding.root)
//뷰 객체 이용
binding.btn1.setOnClickListener {
binding.tv1.text = "Btn 1 Click"
}
binding.btn2.setOnClickListener {
binding.tv1.text = "Btn 2 Click"
}
}
}
뷰바인딩을 이용해 버튼을 클릭하면 Text View의 Text 값이 변경되도록 구현했다.
버튼 1을 클리하면 Text View의 Text 값이 Btn 1 Click으로 변경된다.
버튼 2를 클릭하면 Text View 의 Text 값이 Btn 2 Click으로 변경된다.
결과 확인하기
버튼을 누를 때 마다 Text View의 Text 가 변경되는 걸 확인할 수 있다.
바인딩 클래스 제외하기
레이아웃 XML 하나당 바인딩 클래스가 자동으로 만들어진다. 만약 바인딩 클래스가 필요 없는 레이아웃 XML 은 XML 파일의 루트 태그에 속성을 추가하면 된다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
(...생략...)
tools:viewBindingIgnore="true">
</LinearLayout>
코틀린 안드로이드 Extensions?
과거에는 코틀린 안드로이드 Extensions을 사용했다. 하지만 안드로이드 진영에서 코틀린 안드로이드 Extensions을 2021년까지만 지원하겠다고 공지하면서 그 대신 뷰바인딩 기법을 이용하라고 권고했다.
댓글