Android(Kotlin)

심기일전 코틀린! - 01. ViewBinding

E.I.T.U 2023. 6. 12. 13:55

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!"
}