[Android] findViewById의 문제점과 View binding (Kotlin)

hxeyexn·2023년 6월 9일
0
post-thumbnail

findViewById

findViewById란?

  • 레이아웃에 있는 뷰를 리소스 id를 통해서 원하는 뷰 객체를 가져올 수 있는 메소드이다

findViewById의 문제점

  • 호출될 때마다 뷰 계층 구조를 순회
    : View의 수가 적다면 문제가 되지 않겠지만 수많은 뷰를 findViewById로 가져오면 onCreate는 무거워진다

  • 기본 스레드나 UI 스레드에서 실행
    : 기본 스레드에서 장기 실행 작업을 호출하면 작업이 정지되고 응답하지 않을 수 있다
    : 사용자 인터페이스를 느려지게 할 수 있다


View binding

View binding 이란?

  • 뷰와 상호작용하는 코드를 쉽게 작성할 수 있는 기능
  • findViewById 를 대체하는 용도로 사용

장점

  • Null 안전
    : View Binding은 View의 직접 참조를 생성한다 ➡️ 즉, 개발자가 View ID를 잘못 작성해서 null pointer 예외가 발생할 위험이 없다

  • 유형 안전
    : 생성된 ViewBinding 객체에는 View의 ID와 동일한 이름의 변수가 만들어지고 그 변수에는 View 객체가 들어가 있다 ➡️ 즉, 유형을 잘못 작성해서 class cast 예외가 발생할 위험이 없다

  • 빠른 속도
    : Binding 클래스에 이미 뷰들이 정의되어 있다 ➡️ 즉, 모든 뷰를 순회하면서 찾을 필요가 없어 속도가 빠르다

사용법

  1. build.gradle(Module :app) 에 다음 코드를 추가해주고 sync now를 눌러준다
android {
	...
	viewBinding {
		enabled = true
    }
}
  1. Activity에 binding 선언을 해준다
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

profile
Android Developer

0개의 댓글