뷰 바인딩?

뷰 바인딩이란

 

뷰와 상호작용하는 코드를 더 쉽게 작성할 수 있게 해주는 기능이다

뷰 바인딩은 각  XML 레이아웃 파일의 바인딩 클래스를 생성한다

바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰를 직접 참조한다

 

findViewById와의 차이점

1) Null 안정성(Null safety)

 

뷰 바인딩 기능을 사용하면, 앱이 레이아웃의 각 뷰를 직접 참조할 수 있게 해주는 안전한 코드를 자동으로 생성한다

뷰가 아직 화면에 나타나지 않았는데 그 뷰를 사용하려고 할 때 생길 수 있는 문제들을 예방해 준다

예를 들어, 만약 레이아웃에 버튼이 있어야 하는데 아직 버튼이 생성되지 않았다면 뷰 바인딩은 이를 안전하게 처리하여 앱이 충돌하지 않도록 한다

또한, 만약 레이아웃의 일부만 뷰가 있다면 뷰 바인딩은 해당 뷰가 '가능성 있는 null'(Nullable)임을 알려주어 개발자가 더 주의 깊게 코드를 작성하도록 돕는다

 

 

2) 타입 안전성 (Type Safety)

XML 레이아웃 파일에서 정의된 뷰의 타입과 자동 생성된 바인딩 클래스의 필드 타입이 항상 일치하기 때문에

타입이 서로 맞지 않아 발생할 수 있는 오류를 방지한다

예를 들어 이미지 뷰(ImageView)에 텍스트를 설정하려고 하면 오류가 발생하는데 이를 방지한다

즉, 텍스트 뷰는 텍스트 뷰로만 사용되게 하여 잘못된 타입 사용으로 인한 오류가 발생하지 않도록 보장한다

 

findViewById와 비교

이점

더 빠른 컴파일: 뷰 결합에는 주석 처리가 필요하지 않으므로 컴파일 시간이 더 짧다

사용 편의성: 뷰 결합에는 XML 레이아웃 파일이 필요하지 않으므로 앱에서 더 빠르게 채택할 수 있다 

                    모듈에서 뷰 결합을 사용 설정하면 모듈의 모든 레이아웃에 뷰 결합이 자동으로 적용된다

 

제한사항

뷰 바인딩은 레이아웃 변수 또는 레이아웃 표현식을 지원하지 않으므로 XML 레이아웃 파일에서 바로 동적 UI 콘텐츠를 선언하는 데 사용할 수 없다

 

설정

build.gradle 파일에서 true로 설정하기
바인딩 클래스를 생성하는 동안 레이아웃을 무시하기위해 추가

 

 

사용법

 

뷰 바인딩을 사용하면 각 레이아웃 파일의 바인딩클래스가 생성된다

바인딩 클래스 이름은 파일이름을 파스칼 표기법(대문자로 시작하는 표기법)으로 변환하고

끝에 Binding을 추가하여 생성한다

 

ex)

 바인딩 클래스 이름은 ResultProfileBinding 이 된다

레이아웃의 ID가 없으므로 바인딩 클래스에 참조가 없다

 

 

액티비티에서 사용하기

  1. 생성된 결합 클래스에 포함된 정적 inflate() 메서드를 호출한다
  2. 활동에서 사용할 결합 클래스 인스턴스가 생성된다
  3. getRoot() 메서드를 호출하거나 Kotlin 속성 문법을 사용하여 루트 뷰 참조를 가져온다
  4. 루트 뷰를 setcontentView 에 전달하여 화면의 활성 뷰로 만든다

 

 

프래그먼트에서 사용하기

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

'Today I learned > 용어정리' 카테고리의 다른 글

뷰의 가시성(Visibility)  (0) 2024.05.01
어댑터 뷰(Adapter View)  (0) 2024.04.11
3.3 확장 함수와 확장 프로퍼티  (0) 2024.04.03
추상화  (0) 2024.03.22
인텐트 - (2)  (2) 2024.03.22