
View 결합에는 findViewById를 사용하는 것에 비해 다음과 같은 중요한 장점이 있다.
@Nullable로 표시된다.이러한 차이점은 레이아웃과 코드 간의 비호환성으로 인해 런타임이 아닌 컴파일 시간에 빌드가 실패한다는 것을 의미한다.
즉, 컴파일에서 빌드가 실패하므로 우리가 오류를 찾기 더 쉽다.
뷰 바인딩은 모듈별로 사용 설정된다.
→ 모듈 수준 build.gradle 파일에서 viewBinding 빌드 옵션을 true로 설정
android {
...
buildFeatures {
viewBinding = true
}
}
viewBinding은 gradle에 설정하는 것 만으로 개발자가 작성한 레이아웃 파일들을 다음과 같은 공식으로 모두 바인딩클래스로 자동변환 해줌
<!-- 자동변환공식 : 레이아웃파일명(첫 글자와 언더바 다음영문을 대문자로 변환) + Binding -->
<!-- 예) -->
activity_main.xml = ActivityMainBinding
activity_sub.xml = ActivitySubBinding
item_recycler.xml = ItemRecyclerBinding
→ tools:viewBindingIgnore="true" 속성을 레이아웃 파일의 루트 View에 추가
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
👀
tools:viewBindingIgnore="true"속성은 Android의 View Binding 기능을 사용할 때,
특정 XML 레이아웃 파일을 View Binding이 무시하도록 지시하는 것
View Binding을 사용하면 각 XML 레이아웃 파일에 대해 결합 클래스가 자동 생성되는데,
때로는 특정 상황에서 이 생성을 원하지 않을 수 있다.
Activity에 사용할 결합 클래스 인스턴스를 설정하려면 onCreate()메서드에서
생성된 클래스에 포함된 정정 inflate() 메서드를 호출
그러면 Activity에서 사용할 결합 클래스 인스턴스가 생성됨
getRoot() 메서드를 호출하거나 Kotlin 속성 문법을 사용하여 루트 뷰 참고를 가져온다.
루트 뷰를 setContentView()에 전달하여 화면의 활성 뷰로 만듬
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.myButton.setOnClickListener{
binding.myTextView.text = "바인딩이 잘 되네요!"
}
}
}
inflate()
xml 레이아웃 파일을 메모리에 로드하고, 그 안에 있는 모든 뷰들을 결합 클래스의 인스턴스로 반환
getRoot()
로드된 XML 레이아웃의 루트 뷰(root view)를 가져옴
Kotlin 속성 문법
속성(property)문법을 사용하여 루트 뷰에 직접 접근할 수도 있다.
setContentView()
Activity나 Fragment에서 화면에 표시할 뷰를 설정할 때,
setContentView() 메서드를 호출하거나
Fragment에서는 onCreateView() 메서드에서 반환하는 뷰를 설정
이 때, 결합 클래스에서 가져온 루트 뷰를 setContentView()에 전달하거나 Fragment에서 반환하여 화면에 해당 뷰를 표시함
👀 로드된 XML 레이아웃의 루트 뷰(root view)를 가져온다
로드xml 파일을 메모리에 읽어오는 것을 의미한다.
Android 애플리케이션에서는 XML 레이아웃 파일에 UI 요소들을 정의하고,
이를 앱에서 실제로 사용하기 위해서는 이 파일을 메모리에 로드해서 뷰 객체로 변환해야 함
로드 과정
- XML 파일 읽기 : View Binding을 사용하면 Android 시스템이 지정된 XML 레이아웃 파일을 읽어와서 뷰 객체로 변환.
이 과정에서 XML 파일의 내용을 이해하고 각 요소들을 식별한다.
- 뷰 객체 생성 : XML 파일을 메모리에 로드하면, 각 UI 요소(버튼, 텍스트뷰 등)들은 뷰 객체로 생성됨.
이들 뷰 객체는 앱에서 직접적으로 조작할 수 있는 UI 요소다.
루트 뷰(root view)xml 레이아웃 파일에서 가장 상위에 있는 뷰를 말한다.
예) LinearLayout, ConstraintLayout 같은 레이아웃 요소가 있을 때
이들의 레이아웃 파일의 상위 계층을 형성하며 앱 화면의 기본 구조를 결정
결론ViewBinding을 사용하여 xml파일을 메모리에 로드하고,
그 파일의 가장 상위에 있는 뷰 객체(일반적으로는 레이아웃 요소)를 참조한다는 의미.
이 뷰 객체를 통해 앱에서 해당 레이아웃을 구성하고,
필요에 따라 내부의 다른 뷰들에 접근하거나 조작할 수 있다.