Data binding์ ๋ ์ด์์์ UI ๊ตฌ์ฑ ์์๋ฅผ ์ฑ์ ๋ฐ์ดํฐ์ ๊ฒฐํฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
ViewModel ๋ก๋ถํฐ ์ฌ์ฉ์ ์ด๋ฆ์ ์ฐธ์กฐํด ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋, ๊ธฐ์กด์๋ ์ง์ ์๋ฐ ์ฝ๋๋ฅผ ์์ฑํด ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ค.
tv.text = viewModel.getUserName()
Data binding์ ์ฌ์ฉํ๋ฉด ์๋ฐ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ด์์ ํ์ผ์์ ์ง์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํํ์์ ์ฌ์ฉํด ํ ์คํธ๋ฅผ ๋ณ๊ฒฝ ํ ์ ์๋ค.
<TextView
android:text="@{viewmodel.userName}" />
Data binding์ ํตํด ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋(boilerplate code)๋ฅผ ์ค์ผ ์ ์๋ค๊ณ ํ๋ค.
boilerplate code ?
๋น์ทํ ํํ์์ ์ต์ํ์ ๋ณ๊ฒฝ์ผ๋ก ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ ๋ปํ๋ค.
์ค๋ณต๋์ด ๋ง์ ์์ ์ฝ๋๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ๋ฆฌํฉํ ๋ง์ ๋ฒ๊ฑฐ๋ก์์ง๋ค.
Data binding ์ค์ ํ๊ธฐ
app ๋ชจ๋์ build.gradle ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํ์ฑํํ๊ธฐ
android {
...
dataBinding {
enabled = true
}
}
๊ตฌ๋ฌธ ๊ฐ์กฐ, ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํํ์ ์ค๋ฅ ๊ฒ์ถ, XML ์ฝ๋ ์๋ ์์ฑ, ๋น ๋ฅธ ์ฝ๋ ์ฐธ์กฐ ๊ธฐ๋ฅ์ด ํ์ฑํ๋๋ค.
Binding class ์์ฑํ๊ธฐ
xml ๋ ์ด์์ ํ์ผ์์ ์ต์์ ๋ ์ด์์์ <layout> ํ๊ทธ๋ก ๊ฐ์ธ๋ฉด ๋ฐ์ธ๋ฉ ํด๋์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํด๋์ค๋ฅผ ํตํด ๋ ์ด์์์ ๋ณ์์ ๋ทฐ๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- ์ด๋ ์์ฑ๋๋ ํด๋์ค๋ ViewDataBinding ์ ์์๋ฐ๋ ํด๋์ค๋ค.
์์ฑ๋๋ ๋ฐ์ธ๋ฉ ํด๋์ค ์ด๋ฆ์ xml ๋ ์ด์์ ํ์ผ๋ช ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ค.
- activity_main.xml ํ์ผ๋ช ์ธ ๊ฒฝ์ฐ ActivityMainBinding ์ด๋ฆ์ ํด๋์ค๊ฐ ์์ฑ๋๋ค.
- ๋ ์ด์์์ ๋ํ ํํ์ ~Binding ํด๋์ค๋ก ์์ฑ๋์ง๋ง, ์ค์ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์์๋ ~BindingImpl ์ ์ฐธ์กฐํด์ผ ํ๋ค.
๋ฐ์ธ๋ฉ ํด๋์ค ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด, xml ๋ ์ด์์ ํ์ผ์ <data> ํ๊ทธ ๋ด์ class ์์ฑ์ ์์ฑํ๋ฉด ๋๋ค.
ํด๋น ๊ฒฝ์ฐ์๋ databinding ํจํค์ง์ ํด๋์ค๊ฐ ์์ฑ๋๋ค.
<data class="ContactItem">
...
</data>
ํ์ฌ ๋ชจ๋ ๋ด์ ํจํค์ง์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด ํด๋์ค๋ช ์์ . ์ ์ถ๊ฐํ๋ค.
<data class=".ContactItem">
...
</data>
ํจํค์ง ๋ช ์ ๋ค์ ์ง์ ํ๊ณ ์ถ๋ค๋ฉด, ํจํค์ง๋ช ์ ์ฒด์ ํด๋์ค๋ช ์ ์์ฑํ๋ค.
<data class="com.example.ContactItem">
...
</data>
Activity ์์ View binding ํ๊ธฐ.
DataBindingUtil ํด๋์ค๋ฅผ ํ์ฉํ๋ฉด ์กํฐ๋นํฐ์ setContentView ๋ฅผ ๋์ฒดํ ์ ์๋ค.
class MainActivity: AppCompatActivity() {
lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
}
}
Activity ์ธ์ Fragment, Adapter, CustomView, ๋ฐ์ธ๋ฉ ํด๋์ค๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํด ์ ๋ฆฌ๋์ด์๋ ์ฌ์ดํธ์ด๋ค.
'๐ Client > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] MVVM ๋์์ธํจํด, Jetpack ์ํคํ ์ณ (0) | 2020.11.25 |
---|---|
[Android/Kotlin] BLE Device ์ค์บ์ ์์น ๊ถํํ์ฉ (Fine vs Coarse) (0) | 2020.11.04 |