학습 목표
학습 상황
뷰 바인딩 개념
뷰 바인딩은 XML 레이아웃 파일의 결합 클래스를 생성하고, 해당 인스턴스에서 레이아웃 내 ID가 있는 뷰를 직접 참조할 수 있는 방식이다.
즉, 레이아웃 파일에서 정의한 UI 요소를 자바/코틀린 코드와 바인딩하여 더욱 효과적으로 조작하는 데 도움이 된다.
뷰 바인딩 사용법
android {
buildFeatures {
viewBinding = true
}
}
build.gradle (app) 내에 위 코드를 추가하면, 뷰 바인딩을 이용할 수 있음.
뷰 바인딩에서는 바인딩 클래스가 자동으로 생성되기에, 해당 레이아웃 파일을 무시하려면 viewBindingIgnore = “true”를 레이아웃 파일의 루트 뷰에 추가하면 된다.
뷰 바인딩 과정
findViewById의 한계
Null Safety가 보장되지 않음
해당하는 뷰를 찾지 못하면, null 값을 반환하므로 NPE 에러가 발생한다. 따라서 개발자는 null check를 명시적으로 수행해야 한다.
Type Safety가 보장되지 않음
findViewById는 뷰를 캐스팅해야 하므로, 타입 안정성이 떨어진다. 또한, ClassCastException 에러가 발생할 수 있다.
속도가 느리다
findViewById는 뷰 계층 구조에서 뷰를 검색하는 작업을 수행한다. 따라서 레이아웃이 복잡하고 계층 구조가 깊을 수록 검색 시간이 증가한다.
뷰 바인딩의 장점
Null Safety 지원
뷰 바인딩은 컴파일 과정에서 레이아웃 요소에 대해 뷰를 직접 참조하므로, 유효하지 않은 뷰 ID에 접근하여 NPE(Null pointer Exception)이 발생하는 경우가 없다.
Type Safety 지원
각 바인딩 클래스에 있는 필드 유형은 XML 파일에서 참조하는 뷰와 일치. 클래스 변환 예외 발생하지 않음.
비교적 빠른 속도
뷰 바인딩은 미리 생성된 바인딩 클래스를 이용하므로, findViewById에 비해 효율적이다.
UI와 데이터
뷰 바인딩은 UI 요소에서 타입 안정성에 중점을 두나, 데이터-UI 간 상호작용에는 약하다.
즉, 데이터 처리와 비즈니스 로직 처리에는 적합하지 않다.
→ 이를 위해서는 데이터 바인딩을 이용하거나, VIewModel & LIveData, RxJava 등의 라이브러리를 이용해야 한다.