[Android] ViewBinding
μ λ°μ΄νΈ:
π ViewBinding π
λ·° λ°μΈλ©(ViewBinding)μ μ¬μ©νλ©΄ λ·°μ μνΈμμ©νλ μ½λλ₯Ό μ½κ² μμ±ν μ μλ€. λ·° λ°μΈλ© μμ±μ΄ νμ±νλλ©΄ κ° XML λ μ΄μμ νμΌμ λν λ°μΈλ© ν΄λμ€κ° μλ μμ±λλ€. findViewById
λ₯Ό λ체 νλ€.
Β
π ViewBinding μ€μ
- λͺ¨λ νμ±ν build.gradle νμΌμ λ€μκ³Ό κ°μ΄ μΆκ°νμ.
android {
...
viewBinding {
enabled = true
}
}
Β
π ViewBinding μ¬μ©
- λͺ¨λμμ λ·° λ°μΈλ©μ νμ±ν ν΄μ€¬λ€λ©΄, κ° XML νμΌμ λν΄ λ°μΈλ© ν΄λμ€κ° μμ±λλ€.
- λ°μΈλ© ν΄λμ€μ μ΄λ¦μ XML νμΌμ μ΄λ¦μ μΉ΄λ© νκΈ°λ²μΌλ‘ λ³νλκ³ βBindingβμ΄ μΆκ°λλ€.
- activity_main.xml νμΌμ λ°μΈλ© ν΄λμ€ μ΄λ¦μ ActivityMainBinding μΌλ‘ λ³ν!
- getRoot() λ©μλ ν¬ν¨
λͺ¨λ λ°μΈλ© ν΄λμ€λ ν΄λΉ λ μ΄μμ νμΌμ 루νΈλ·°μ λν μ§μ μ°Έμ‘°λ₯Ό μ 곡νλ€. - μ‘ν°λΉν°μμ setContentViewμ 루νΈλ·° μ μ©νκΈ°
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle) {
suuper.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutflater)
setContentView(binding.root)
}
Β
π findViewById μ μ°¨μ΄μ
- Null safety
λ·° μ§μ μ°Έμ‘°μ΄λ―λ‘ μλͺ»λ IDλ‘ Null pointer Exception λ°μ μν μλ€. - Type safety
λ·° νμ μ΄ μΌμΉν΄μ Class Cast Exception λ°μ μνλ€.
Β
π DataBinding κ³Ό μ°¨μ΄μ
- λ°μ΄ν° λ°μΈλ©μ
<layout>
νκ·Έλ₯Ό μ¬μ©ν λ μ΄μμλ§ μ²λ¦¬ - λ·° λ°μΈλ©μ λ μ΄μμ λ³μ/ννμμ μ§μνμ§ μμΌλ―λ‘ XMLμ λ°μ΄ν°μ λ μ΄μμ λ°μΈλ© λͺ»νλ€.
- λ°μ΄ν° λ°μΈλ©μ ν΄λμ€λ₯Ό μμ±ν λ 루νΈλ·°μ tag μ½μ
- λ·° λ°μΈλ©μ μ΄λ Έν μ΄μ νλ‘μΈμ± μ¬μ©ν΄μ λ λΉ λ₯΄κ² λ°μΈλ© ν΄λμ€ μμ±
- viewBinding μ λ¨μ μμ μ μ ν©νλ€!
Β
Β
[μ°Έκ³ ]
https://developer.android.com/topic/libraries/view-binding?hl=ko
https://charlezz.medium.com/view-binding-μ΄ν΄λ³΄κΈ°-df3526d909a7
https://velog.io/@jaeyunn_15/AndroidViewBinding-vs-DataBinding