안드로이드 앱 개발에서 사용되는 기술로서, 뷰와 데이터를 간단하게 바인딩(연결)하여 UI를 업데이트하는 데 도움을 주는 라이브러리입니다. XML 레이아웃 파일에서 정의된 뷰와 액티비티 또는 프래그먼트에서 사용하는 데이터 간의 연결을 쉽게 만들어줍니다.
XML 레이아웃 파일에서 화면 구성을 나타내고, 이 화면들을 코드에서 findViewById와 같은 메서드를 사용하여 연결해줍니다. 하지만 findViewById를 통한 검색은 번거로우며, 코드가 복잡해지고 유지보수가 어려워질 수 있습니다.
이러한 문제를 해결하기 위해 데이터 바인딩은 데이터와 뷰를 자동으로 연결해주는 바인딩 어댑터를 제공합니다. 이렇게 하면 XML 레이아웃 파일에서 직접 변수나 데이터를 바인딩할 수 있으며, 뷰를 조작할 때 직접 findViewById를 호출할 필요가 없어집니다.(오!😏)
코드의 가독성과 유지보수가 쉽습니다. 바인딩 하게 되면 XML 레이아웃과 Kotlin 코드 사이의 강력한 연결을 만들어 코드를 더욱 읽기 쉽고 유지보수하기 쉽게 만듭니다.
널 안정성: Kotlin의 주요 특성인 널 안전성을 제공합니다. 즉, 바인딩이 올바르게 구성되지 않은 경우 런타임에서 NPE(Null Pointer Exception)가 발생하지 않습니다.
생산성 향상: 바인딩 어댑터를 사용하면 뷰를 찾는 로직을 작성할 필요가 없으므로 코드 작성 시간이 줄어들고 개발자의 생산성이 향상됩니다.
당연히 findViewById()를 사용하지 않아도 된다. 자동으로 xml에서 만든 View들을 만들어준다.
RecyclerView 사용 시 각각의 item들을 set해주지 않아도 알아서 xml에서 처리할 수 있다.
Observable을 이용해 실시간으로 데이터를 바꿔줄 수 있다.
정답은 땡입니다!
데이터 바인딩(DataBinding) 기능을 사용하지 않는다면 빌드 시간 및 APK 크기 측면에서 가벼운 뷰 바인딩(ViewBinding) 사용 권장하기 때문입니다.
val inputId = intent.getStringExtra("ID")
val idText = findViewById<TextView>(R.id.getId) <- 이게 뷰바인딩
idText.text = inputId
android {
...
dataBinding {
enabled true
}
...
}
<?xml version="1.0" encoding="utf-8"?>
<layout> <- 레이아웃
<androidx.constraintlayout.widget.ConstraintLayout...>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
...
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btnSample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout> <- 레이아웃
// MainActivity.kt
private lateinit var binding: ActivityMainBinding
// xml 파일명이 CamelCase 표기로 바뀌고 Binding이 붙습니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.testBtnId.setOnClickListener {
Toast.makeText(this, "click", Toast.LENGTH_LONG).show() <- 데이터 바인딩 사용
}
}
이렇게 하면 뷰 바인딩을 사용했을 때처럼 똑같이 토스트 메세지가 뜨는것을 볼 수 있습니다.
오 덕분에 몰랐던 걸 알게되었습니다 이해도 너무 잘되게 설명해주시네요!!