๐ก ViewBinding๊ณผ DataBinding์ ์ฐจ์ด์ ํน์ง์ ๋น๊ตํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค
ViewBinding
- ViewBinding์ ์กํฐ๋นํฐ ๋๋ ํ๋๊ทธ๋จผํธ์์ xml์ ๋ทฐ๋ฅผ ์ง์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- ๊ฐ XML ๋ ์ด์์ ํ์ผ์ Binding ํด๋์ค๋ฅผ ์์ฑํ์ฌ ์ธ์คํด์ค์์ ๋ ์ด์์์ ID๊ฐ ์๋ ๋ชจ๋ ๋ทฐ๋ฅผ ์ง์ ์ฐธ์กฐ ํ ์ ์์ต๋๋ค.
- findViewById๋ฅผ ์ฐ์ง ์๊ณ XML์ view component์ ์ ๊ทผํ๋ object๋ฅผ ๋ฐํ๋ฐ์์ view์ ์ ๊ทผํ ์ ์์ต๋๋ค.
ํน์ง
- ์๋์ผ๋ก ์์ฑ๋๋ ๋ทฐ ๋ฐ์ธ๋ฉ ํด๋์ค
- XML ๋ ์ด์์๋ง๋ค ์๋์ผ๋ก ๋ทฐ ๋ฐ์ธ๋ฉ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค.
- activity_main.xml → ActivityMainBinding
- ๊ฐ๋จํ๊ณ ์์ ํ ํ์
๋ฐ์ธ๋ฉ
- ๋ ์ด์์์ ์๋ ๋ชจ๋ ๋ทฐ์ ๋ํด null-safe, type-safeํ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ชป๋ ๋ทฐ ID๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ์๋ชป๋ ํ์ ์ ์บ์คํ ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ค์ง ๋ทฐ ๋ฐ์ธ๋ฉ๋ง ์ ๊ณต
- ๋ ์ด์์ ํ์ผ์ ์ ์๋ ๋ทฐ์ ๋ํ ์ง์ ์ ์ธ ์ฐธ์กฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ก์ง์ ์ถ๊ฐํ๊ฑฐ๋ ํํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋น ๋ฅด๊ณ ๊ฐ๋จํ ์ฌ์ฉ
- ์ถ๊ฐ์ ์ธ ์ค์ ์์ด ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ์ ์ํฅ์ ๋ ๋ฏธ์นฉ๋๋ค.
๋จ์
- DataBinding๊ณผ ๋ฌ๋ฆฌ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ฉฐ, ํํ์์ด๋ ๋ณ์, ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋์ ๋ทฐ์ ๋ํ ์ถ๊ฐ์ ์ ๊ฑฐ์ ์ด๋ ค์
- ์ ์ ์ผ๋ก ์ ์๋ ๋ ์ด์์ ํ์ผ์ ๋ํด ๋ทฐ๋ฅผ ๋ฐ์ธ๋ฉํ๊ธฐ ๋๋ฌธ์, ๋์ ์ผ๋ก ๋ทฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.text = "Hello, ViewBinding!"
}
}
DataBinding
- DataBinding์ XML์์ ์ง์ ๋ทฐ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๊ธฐ ์ํด ์ฌ์ฉํ๋ Android Jetpack ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌ์ฑ ์์์ ๋๋ค.
- DataBinding์ ์ฌ์ฉํ์ง ์์ผ๋ฉด findViewById์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ ๋ฆฌ์์ค ํธ๋ฆฌ๋ฅผ ์ฐพ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ผํฉ๋๋ค.
- ์ด๋ ํ๋ก๊ทธ๋จ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ก์๋จน๊ณ ์ฝ๋ ๊ธธ์ด๊ฐ ๋ถํ์ํ๊ฒ ๊ธธ์ด์ง๋๋ค.
- UI ์์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์๋, ์ ์ธ์ ํ์์ผ๋ก ๊ฒฐํฉํ๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
์ ์ธ์ ํ์
- XML์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฐ๊ฒฐํด์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
<TextView android:text="@{viewmodel.name}" />
ํน์ง
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
- ๋ฐ์ดํฐ์ ๋ณํ๊ฐ UI์ ์๋์ผ๋ก ๋ฐ์๋๋ฉฐ, ๋ฐ๋๋ก UI ๋ณํ๋ ๋ฐ์ดํฐ์ ์๋์ผ๋ก ๋ฐ์๋ ์ ์์ต๋๋ค.
- ๋ทฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ดํฐ ๊ฐ์ฒด์ ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- MVVM ํจํด๊ณผ์ ํตํฉ
- DataBinding์ MVVM ์ํคํ ์ฒ์ ์ ํตํฉ๋ฉ๋๋ค.
- LiveData๋ ViewModel๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๋ทฐ์ ์ฐ๊ฒฐ์ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- BindingAdapter
- BindingAdapter๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ๋ง๋ค๊ณ XML์์ ๋ค์ํ ๋ทฐ์ ๋ํด ๋์์ ์ ์ํ ์ ์์ต๋๋ค.
- ์ฝ๋์ XML ๋ถ๋ฆฌ
- XML์์ ๋ฐ์ดํฐ ๊ด๋ จ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก, ์ฝ๋์ ๋ทฐ ๋ก์ง์ด ๋ถ๋ฆฌ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด์ UI ์ ๋ฐ์ดํธ๋ฅผ ์ํ ์ฝ๋๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
- ์ง๊ด์ ์ธ ํํ์
- ์ง๊ด์ ์ธ ํํ์์ผ๋ก UI์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋ ๋ก์ง์ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๋จ์
- ๋จ์ ์๋ ๋ณต์ก์ฑ๊ณผ ์ฑ๋ฅ์ด ์์ต๋๋ค.
- ๊ฐ๋จํ ํ๋ก์ ํธ์์๋ ViewBinding์ด ๋ ์ ํฉํ ์ ์์ผ๋ฉฐ, ์ค์ ๊ณผ ์์ฉ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ฝ๊ฐ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ๋งค์ฐ ๋ณต์กํ ๋ฐ์ธ๋ฉ์ ํ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
ViewBinding vs DataBinding
- DataBinding์ XML์์ ๋ทฐ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
- ๋ทฐ ๋ฐ์ธ๋ฉ ๊ธฐ๋ฅ + ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ทฐ์ ๋ฐ์ธ๋ฉ
- ViewBinding์ ์กํฐ๋นํฐ ๋๋ ํ๋๊ทธ๋จผํธ์์ XML์ ๋ทฐ๋ฅผ ์ง์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
- ์ค์ง ์ฝ๋์ ๋ทฐ๋ฅผ ๋ฐ์ธ๋ฉํ๊ธฐ ์ํด ์ฌ์ฉ
- ViewBinding์ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ๋ฐฉ์์ด ์๋๋ฉฐ, DataBinding๊ณผ ๊ด๋ จํ ์ค๋ฒํค๋ ๋ฐ ์ฑ๋ฅ ์ด์๋ฅผ ํผํ ์ ์์ผ๋ฉฐ ๋น๋์ ์๊ฐ์ด ์ ๊ฒ ์์๋ฉ๋๋ค.
์ฐธ๊ณ
https://velog.io/@jeongminji4490/View-Binding-Data-Binding
https://velog.io/@sh1mj1/Android-Binding-ViewBinding-DataBinding