상세 컨텐츠

본문 제목

[AndroidStudio-Kotlin] View Binding 뷰 바인딩

Tech/Mobile

by 테크투아트 2021. 7. 13. 10:54

본문

View에서 메서드를 호출하거나 속성에 액세스하기 전에, 먼저 Button 또는 TextView와 같은 View에 대한 참조를 찾아야 합니다.

안드로이드 프레임워크는 이를 위해 findViewById() 메서드를 제공합니다.

 

findViewById() 예제 코드

// Old way with findViewById()
val myButton: Button = findViewId(R.id.my_button)
myButton.text = "A Button"

 

 

View Binding

findViewById() 대신 View Binding을 통해 UI의 뷰에서 메서드를 훨씬 더 쉽고 빠르게 호출할 수 있습니다.

 

1. Gradle에서 View Binding 사용 설정

앱의 build.gradle 파일을 열고 android 섹션에서 다음 줄을 추가합니다.

 

buildFeatures {
	viewBinding = true
}

 

'Gradle files have changed since last project sync' 라는 메시지가 뜨면 Sync Project with Gradle File 버튼을 클릭해서 싱크를 맞춰줍니다.

 

2. 결합 객체 초기화

MainActivity.kt 의 OnCreate() 함수 내에서 binding 객체를 초기화해줍니다.

 

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

 

 코드 설명  

 

lateinit var binding: ActivityMainBinding

activity_main.xml 레이아웃의 binding 객체를 초기화 합니다.

lateinit 키워드는 late init 즉, 늦은 초기화를 말합니다.

코틀린에서는 늦은 초기화를 하려면 선언 시 null값을 명시해줘야하는데

이 대신 lateinit라는 키워드를 사용하여 선언을 먼저 해두고

변수를 사용하기 이전에 초기화를 할 것이다 라고 명시해줍니다.

 

binding = ActivityMainBinding.inflate(layoutInflater)

여기서는 binding 객체를 초기화해줍니다. Binding 클래스 이름은 XML 파일의 이름을 카멜 표기법으로 변환하고 이름끝에 'Binding'을 추가하여 생성됩니다. 마찬가지로 각 뷰를 위한 참조는 밑줄을 삭제하고 이름을 카멜표기법으로 변환하여 생성됩니다. 예를 들어 activity_main.xmlActivityMainBinding 이 되고 binding.textView@id/text_view에 액세스 할 수 있습니다.

 

setContentView(binding.root)

activity의 contentView를 설정합니다. 레이아웃 리소스 ID인 R.layout.activity_main을 전달하는 대신, 앱의 뷰 계층 구조 루트인 binding.root 를 지정합니다.

 

 

 

결과

// Better way with view binding
val myButton: Button = binding.myButton
myButton.text = "A button"

// Best way with view binding and no extra variable
binding.myButton.text = "A button"

관련글 더보기