Android Jetpack

Android View에 대한 접근 - 2 (ViewBinding)

----___<<<<< 2021. 12. 11. 21:02

 findByViewId와, Kotlin-extensions를 대체하라고 구글에서 권장하는 viewbinding과 databinding에 대해서 알아보겠습니다.

 

 일단 kotlin-extensions를 대체해서 쓰라고 한 것은 viewbinding입니다. 어떻게 쓰는지 한번 보고 가보겠습니다.

 

 ViewBinding

 

 우선 사용을 위해 gradle에 추가해주고 

 

 

 

 Activity에서는 아래와 같이 사용합니다.

 

 구글 공식문서에서는 아래와 같이 설명하고 있습니다.

 

활동에 사용할 결합 클래스 인스턴스를 설정하려면 활동의 onCreate() 메서드에서 다음 단계를 따릅니다.

  1. 생성된 결합 클래스에 포함된 정적 inflate() 메서드를 호출합니다. 그러면 활동에서 사용할 결합 클래스 인스턴스가 생성됩니다.
  2. getRoot() 메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져옵니다.
  3. 루트 뷰를 setContentView()에 전달하여 화면상의 활성 뷰로 만듭니다.

 이 것을 코드로 만들면

 

 이렇게 이용할 수 있습니다.

 

 kotlin-extensions와 유사하게 이용할 수 있습니다.

 

 그렇다면 Fragment에서는 어떻게 이용할까요?

 

 SecondActivity라는 파일을 만들어서 BlankFragment를 적용해줬습니다.

 

 마찬가지로 구글 공식문서를 참고하면

 

프래그먼트에서 뷰 결합 사용

프래그먼트에 사용할 결합 클래스 인스턴스를 설정하려면 프래그먼트의 onCreateView() 메서드에서 다음 단계를 따릅니다.

  1. 생성된 결합 클래스에 포함된 정적 inflate() 메서드를 호출합니다. 그러면 프래그먼트에서 사용할 결합 클래스 인스턴스가 생성됩니다.
  2. getRoot() 메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져옵니다.
  3. onCreateView() 메서드에서 루트 뷰를 반환하여 화면상의 활성 뷰로 만듭니다.

 

 프래그먼트에서는 아래와 같이 사용해줄 수 있습니다.

 

 

 자, 그러면 findViewById와 비교해서, 간편하게 접근할 수 있다는 것은 알겠는데, 또 어떠한 차이가 있을까요?

 

findViewById와의 차이점

뷰 결합에는 findViewById를 사용하는 것에 비해 다음과 같은 중요한 장점이 있습니다.

  • Null 안전: 뷰 결합은 뷰의 직접 참조를 생성하므로 유효하지 않은 뷰 ID로 인해 null 포인터 예외가 발생할 위험이 없습니다. 또한 레이아웃의 일부 구성에만 뷰가 있는 경우 결합 클래스에서 참조를 포함하는 필드가 @Nullable로 표시됩니다.
  • 유형 안전: 각 바인딩 클래스에 있는 필드의 유형이 XML 파일에서 참조하는 뷰와 일치합니다. 즉, 클래스 변환 예외가 발생할 위험이 없습니다.

이러한 차이점은 레이아웃과 코드 사이의 비호환성으로 인해 런타임이 아닌 컴파일 시간에 빌드가 실패하게 된다는 것을 의미합니다.

 

 Null Safe하고, Type이 틀리므로 인해서 발생되는 문제를 차단할 수 있다는 것입니다.

 

 자, 이제 그렇다면 ViewBinding까지는 알아봤는데, DataBinding과는 뭐가 다른지 알아보겠습니다.

 

 일단 구글 공식문서에는 아래와 같이 설명하고 있습니다.

 

데이터 결합과 비교

뷰 결합과 데이터 결합은 모두 뷰를 직접 참조하는 데 사용할 수 있는 결합 클래스를 생성합니다. 하지만 뷰 결합은 보다 단순한 사용 사례를 처리하기 위한 것이며 데이터 결합에 비해 다음과 같은 이점을 제공합니다.

  • 더 빠른 컴파일: 뷰 결합에는 주석 처리가 필요하지 않으므로 컴파일 시간이 더 짧습니다.
  • 사용 편의성: 뷰 결합에는 특별히 태그된 XML 레이아웃 파일이 필요하지 않으므로 앱에서 더 신속하게 채택할 수 있습니다. 모듈에서 뷰 결합을 사용 설정하면 모듈의 모든 레이아웃에 뷰 결합이 자동으로 적용됩니다.

반대로 뷰 결합에는 데이터 결합과 비교할 때 다음과 같은 제한사항이 있습니다.

위 사항을 고려할 때 일부 사례에서 프로젝트에 뷰 결합과 데이터 결합을 모두 사용하는 것이 가장 좋습니다. 고급 기능이 필요한 레이아웃에는 데이터 결합을, 고급 기능이 필요 없는 레이아웃에는 뷰 결합을 사용할 수 있습니다.

 

 

 양방향 데이터 결합 이니 뭐니 하는 것들이 나오는데 조금 길어지는 것 같으니, 다음 글에서 알아보겠습니다.

 

 

 - 참조 

 

https://developer.android.com/topic/libraries/view-binding?hl=ko 

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩

developer.android.com