Data Binding
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(Data Binding)์ ์จ์ผํ๋ ์ด์
์๋๋ก์ด๋๋ฅผ ๋ฐฐ์ฐ๋ ์ด๊ธฐ์๋ findViewById()๋ฅผ ๋ง์ด ์ด๋ค.
๊ทธ๋ฌ๋ findViewById()๋ runtime์ ๋ทฐ์ ๊ณ์ธต์ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ๋ ๋นํจ์จ์ ์ธ ํจ์์ด๋ค.
๊ฐ๋จํ ์ฑ์์๋ ์๊ด์์ง๋ง, ์ฑ์ด ์ปค์ง๋ฉด ํจ์จ์ด ๋จ์ด์ง๋คใ ใ
Data Binding์ ๊ฐ ๋ ์ด์์ xml๋ง๋ค binding class๋ฅผ ๋ง๋ ๋ค.
(activity_main ⇒ ActivityMainBinding)
๊ทธ๋์ binding class๋ฅผ ํตํด ์ฝ๊ฒ ๋ทฐ์ ์ ๊ทผํ ์ ์์ด์, ์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๋ค.
๋ํ, ์์ฆ ๋ง์ด ์ฐ๋ MVVM ์ํคํ ์ณ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(Data Binding)์ ์ฅ์
- findViewById()์ ๋นํจ์จ์ฑ์ ๊ฐ์ ํจ ⇒ ์ฑ์ Performance ์์น
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง ⇒ ๊ฐ๋ ์ฑ๐, ์ ์ง๋ณด์ ์ฌ์์ง
- binding๋ ๋ณ์๋ค์ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํด์ค
- compile์ ์คํ๋๊ธฐ ๋๋ฌธ์, error๋ฅผ ์ฝ๊ฒ ์ ์ ์๋ค.
(runtime์ ์๋ฌ๋ฅผ ๋ง๋ฅ๋ฐ์ผ ์ผ์ด ์์..) - MVVM ์ํคํ ์ณ์ ViewModel๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ข๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ
1. build.gradle ํ์ผ์ kotlin-kapt
, dataBinding
์์ ์ถ๊ฐ
plugins {
...
id 'kotlin-kapt'
}
android {
...
buildFeatures{
dataBinding = true
}
...
}
2. xml ์์
• ๋ ์ด์์ ํ์ผ์ ๋ฃจํธ ํ๊ทธ์ <layout>
์ถ๊ฐ
• ์ถํ <data>
ํ๊ทธ ์ถ๊ฐ๋ ๊ฐ๋ฅํ๋ค.
3. ์กํฐ๋นํฐ์ ์ธํ
์กํฐ๋นํฐ ์ธํ
์ , Build → Rebuild Project
(๊ทผ๋ฐ, ๊น๋นกํ๊ณ ์ํ๋๋ฐ๋ ์ ์คํ๋๊ธด ํ๋ค.)
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.button.setOnClickListener {
...
}
}
}
Activity์๋ ์ด๋ฐ์์ผ๋ก ๋ฐ์ธ๋ฉ ํด์ฃผ๋ฉด ๋๋ค!
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ์ ๋!