호출될 때마다 뷰 계층 구조를 순회
: View의 수가 적다면 문제가 되지 않겠지만 수많은 뷰를 findViewById로 가져오면 onCreate는 무거워진다
기본 스레드나 UI 스레드에서 실행
: 기본 스레드에서 장기 실행 작업을 호출하면 작업이 정지되고 응답하지 않을 수 있다
: 사용자 인터페이스를 느려지게 할 수 있다
findViewById
를 대체하는 용도로 사용Null 안전
: View Binding은 View의 직접 참조를 생성한다 ➡️ 즉, 개발자가 View ID를 잘못 작성해서 null pointer 예외가 발생할 위험이 없다
유형 안전
: 생성된 ViewBinding 객체에는 View의 ID와 동일한 이름의 변수가 만들어지고 그 변수에는 View 객체가 들어가 있다 ➡️ 즉, 유형을 잘못 작성해서 class cast 예외가 발생할 위험이 없다
빠른 속도
: Binding 클래스에 이미 뷰들이 정의되어 있다 ➡️ 즉, 모든 뷰를 순회하면서 찾을 필요가 없어 속도가 빠르다
build.gradle(Module :app)
에 다음 코드를 추가해주고 sync now를 눌러준다android {
...
viewBinding {
enabled = true
}
}
class MainActivity : AppCompatActivity() {
// ViewBinding 객체를 담을 변수
// 자동으로 생성되는 파일의 이름은 xml 파일의 이름으로 생성
// activity_main.xml -> ActivityMainBinding
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// layoutInflater : XML 파일을 통해 객체를 생성하는 도구
activityMainBinding = ActivityMainBinding.inflater(layoutInflater)
// Viewbinding 객체가 관리하는 View 중에 최상위 View를 지정하여 화면에 나타나게 한다
setContentView(activityMainBinding.root)
}
}
📚 참고자료
윤재성 강사님 Kotlin based Android PPT 8강 ViewBinding
Android Docs : View binding