티스토리 뷰

뷰 바인딩을 사용하는 이유

코드에서 XML에 입력한 객체를 사용하기 위해 findViewById() 함수를 이용하는 것은 꽤 귀찮은 방법이다.

 

이 경우 다음과 같이 id 값으로 뷰 객체를 획득하는데

 

val textView1: textView = findViewById(R.id.text1)

 

한 화면을 구성하는 데만도 많은 뷰가 필요하고,

뷰는 대부분 코드에서 이용하므로

-> 코드에서 뷰 객체를 선언하고 모두 findViewById() 함수로 하나하나 가져와야 하므로 번거롭다는 단점이 있다.

 

개발자들이 조금 더 쉽게 레이아웃 XML 파일에 등록된 뷰 객체를 쉽게 사용하기 위해

뷰 바인딩을 이용하게 되었다.


뷰 바인딩(View Binding)이란?

뷰 바인딩은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법이다.

 

뷰 바인딩을 사용하는 방법에 대해 살펴보자.

그래들 파일에 뷰 바인딩 설정하기

  • build.gradle 파일을 열어 android 영역에 다음과 같이 buildFeatures를 선언한다.
android{
	...
    buildFeatures{
    	viewBinding = true // 뷰 바인딩을 적용하라는 의미
    }
}

 

이렇게 하면 레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다.

자동으로 만들어지는 클래스의 이름은 레이아웃 XML 파일명을 따른다.

  • 첫 글자를 대문자로 하고 밑줄(_)은 빼고 뒤에 오는 단어를 대문자로 만든 후 'Binding'을 추가한다.
  • activity_add_to_do.xml -> ActivityAddToDoBinding

binding 객체 이용 방법

자동으로 만들어진 클래스의 inflate() 함수를 호출하면 바인딩 객체를 얻을 수 있다.

+ 이때 인자로 layoutInflater를 전달한다.

 

val binding = ActivityAddToDoBinding.inflate(layoutInflater)

// 바인딩 객체의 root 프로퍼티에는 XML의 루트 태그 객체가 자동으로 등록 되므로 
// 액티비티 화면 출력은 setContentView() 함수에 binding.root를 전달하면 된다.
setContentView(binding.root)

 

바인딩 객체에 등록된 뷰 객체명은 XML 파일에 등록한 뷰의 id 값을 따른다.

XML에 뷰를 다음과 같이 등록했다면 바인딩 객체에 button1이라는 프로퍼티명으로 등록된다.

 

<Button android:id="@+id/button1" />

 

따라서 코드에서는 다음과 같이 이용하면 된다.

 

binding.button1.setOnClickListener{
	Toast.makeText(this, "버튼1을 클릭하였습니다.", Toast.LENGTH_SHORT).show()
}

binding 클래스가 필요 없는 경우

build.gradle 파일에 뷰 바인딩 설정 시 레이아웃 XML 하나당 바인딩 클래스가 자동으로 만들어지는데,

이때는 XML 파일의 루트 태그에 다음과 같은 속성을 추가하면 해당 XML 파일을 위한 바인딩 클래스를 만들지 않는다.

 

tools:viewBindingIgnore="true"

참고

깡샘의 안드로이드 앱 프로그래밍 with 코틀린