ViewBinding 이란 무엇인가
Android Studio 를 이용해 앱을 개발하는 경우 우리는 어떻게 화면을 구성하는지를 살펴보면
먼저 res -> layout 폴더에 layout xml 파일 만들고 필요한 View 들을 선언하는 것으로 화면의 틀을 잡는다.
그 후, Activity 혹은 Fragment 혹은 ViewHolder 등등 에서 LayoutInflater 를 이용하여
xml 파일을 View Object 로 가져온 후 활용한다.
이 때, 특정 View 에 접근해야하는 경우
findViewById 를 통해 xml 선언 시 설정한 id 를 가진 뷰를 찾아서 접근하게 된다.
<!-- activity_main.xml -->
<LinearLayout>
...
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
...
</LinearLayout>
//MainActivity.class
lateinit var textView: TextView
override fun onCreate(saveInstanceState: Bundle) {
super.onCreate(saveInstanceState)
//xml 파일을 View 로써 가져옴
setContentView(R.layout.activity_main)
//textView 를 id 로 갖는 TextView 를 초기화
textView = findViewById(R.id.textView)
textView.text = "Hello, World!"
}
(가장 기본적인 방법이지만 특정 View 에 접근해야 할 때 마다 선언 후 초기화 과정이 필요하다)
그래서 이런 불편함을 해소하기 위해 나온것이 바로 ViewBinding 이다.
단어의 의미 그대로 View 를 Binding 한 것인데
xml 파일 선언 시 Android Studio 내부적으로 사용자가 따로 View 요소들을 선언할 필요 없도록
각 요소들을 미리 선언해둔 Binding 클래스를 생성 해주는 것이다.
이렇게되면 View 에 접근해야할 때 마다 선언과 초기화를 하는 과정이 없어지기 때문에
코드가 간략해지는것과 더불어 특정 View 를 선언만 해두고 초기화하지 않았을 때 접근하려고 하여
NullPointerException 이 발생하는 것을 방지할 수 있다.
ViewBinding 사용하기
먼저 app 수준의 build.gradle 에서 viewBinding 선언을 해주어야한다.
android {
....
buildFeatures {
viewBinding true
}
}
그 후, View 를 선언할 때 Binding 클래스를 선언하는 것으로 대체할 수 있다.
//viewBinding 을 변수로서 선언
lateinit var binding: ActivityMainBinding
override fun onCreate(saveInstanceState: Bundle) {
super.onCreate(saveInstanceState)
//LayoutInflater 를 통해 viewBinding을 inflate
binding = ActivityMainBinding.inflate(layoutInflater)
//binding.root : View 를 setContentView 의 매개변수로 넘김
setContentView(binding.root)
//특정 View 에 접근하는 경우 layout xml 에서 선언한 id 를 통해 접근 가능
binding.textView.text = "Hello, World!"
}
'Android(Kotlin)' 카테고리의 다른 글
심기일전 코틀린! - 02. Jetpack Compose (2) (0) | 2023.06.23 |
---|---|
심기일전 코틀린! - 02. Jetpack Compose (1) (0) | 2023.06.20 |
심기일전 코틀린! - 00. 코틀린 (0) | 2023.06.02 |
안드로이드 레트로핏(Retrofit) (2) (0) | 2021.09.17 |
안드로이드 레트로핏(Retrofit) (1) (0) | 2021.07.29 |