5. 뷰 바인딩의 개념, 특징, 그리고 한계

YeongJun Son·2023년 10월 11일
0

Android를 배우다

목록 보기
5/7

뷰 바인딩의 개념, 특징, 그리고 한계

들어가며

학습 목표

  1. 뷰 바인딩 개념과 사용법에 대해서 알아본다.
  2. findViewById와의 차이점에 대해 알아본다.
  3. 뷰 바인딩의 한계에 대해 알아본다.

학습 상황

  1. 1차 과제에서 주로 썼던 findViewById()는 비용이 크다.
  2. 뷰 바인딩을 이용해서 Tic Tac Toe 앱을 구현해야 했다.

뷰 바인딩이란?

뷰 바인딩 개념

  • 뷰 바인딩은 XML 레이아웃 파일의 결합 클래스를 생성하고, 해당 인스턴스에서 레이아웃 내 ID가 있는 뷰를 직접 참조할 수 있는 방식이다.

  • 즉, 레이아웃 파일에서 정의한 UI 요소를 자바/코틀린 코드와 바인딩하여 더욱 효과적으로 조작하는 데 도움이 된다.

뷰 바인딩 사용법

android {
	buildFeatures {
    	viewBinding = true
    }
}
  • build.gradle (app) 내에 위 코드를 추가하면, 뷰 바인딩을 이용할 수 있음.

  • 뷰 바인딩에서는 바인딩 클래스가 자동으로 생성되기에, 해당 레이아웃 파일을 무시하려면 viewBindingIgnore = “true”를 레이아웃 파일의 루트 뷰에 추가하면 된다.

  • 뷰 바인딩 과정

    1. inflate() 메서드 호출 시 활동에서 사용할 결합 클래스 인스턴스 생성
    2. getRoot() 메서드를 호출하거나 Kotlin 속성 구문을 사용해서 루트 뷰를 가져옴
    3. 루트 뷰를 setContentVIew()에 전달

findViewById와의 차이점

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 등의 라이브러리를 이용해야 한다.

profile
제가 좋아하는 것은 도가 아니라 기입니다

0개의 댓글