[Android] DataBinding
์ ๋ฐ์ดํธ:
๐โโฌ DataBinding โ
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(DataBinding)์ UI ์์์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ์ง ์๊ณ , ์ ์ธ์ ๋ฐฉ์์ผ๋ก ๊ฒฐํฉํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉ์์ด๋ผ ํ๋ฉด ๊ธฐ์กด์ ์ฝ๋ ๋ด์์ UI ์์๋ฅผ ๊ฐ์ ธ์ findViewById
๋ก ๋ฐ์ดํฐ์ ๊ฒฐํฉํด์ค ํ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ด๋ค. ์ ์ธ์ ํ์์ ์ฝ๋ ๋ด์์ UI ์์๋ฅผ ํธ์ถํ ํ์ ์์ด ๋ ์ด์์ ํ์ผ(xml)์์ ์ง์ ํ ๋นํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
ย
๐ด DataBinding ์ฅ์
- ๋ฐ์ดํฐ์ UI ์์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ฝ๋ ์ต์ํ
findViewById
๋ฅผ ํธ์ถํ์ง ์์๋, ์๋์ผ๋ก xml์ view๋ฅผ ์์ฑ- RecyclerView ์ฌ์ฉ ์ item ์๋์ผ๋ก set
- data ๋ณ๊ฒฝ ์ ์๋์ผ๋ก view ๋ณ๊ฒฝ
- ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ณ , ์๋์ ์ผ๋ก ์ฝ๋๋ ๊ฐ์
- MVP / MVVM ํจํด ๊ตฌํ์ ์ ์ฉ
๋ค๋ง, ํด๋์ค ํ์ผ์ด ๋ง์ด ์๊ธฐ๊ณ , ๋น๋ ์๋๊ฐ ๋๋ ค์ง๋ ๋จ์ ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋จ๋
์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ์ํคํ
์ฒ ํจํด๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ์ต๋ํ ํ์ฉํ ์ ์๋ค.
ย
๐ด DataBinding ์ค์
- ๋ชจ๋ ํ์ฑํ build.gradle ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํ์.
android {
...
dataBinding {
enabled = true
}
}
ย
๐ด DataBinding ์ฌ์ฉ
1. xml ํ์ผ์ ํ๊ทธ ์์ฑ
- dataBinding์ ์ฌ์ฉํ๋ xml ํ์ผ์ ๋ฃจํธ ๋ ์ด์์์
<layout>
ํ๊ทธ๋ก ๊ฐ์ผ๋ค.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
...
</layout>
ย
2. <data>
ํ๊ทธ์ <variable>
ํ๊ทธ ์ฌ์ฉ
- ๋ ์ด์์์ ๋ทฐ์ ์ฐ๊ฒฐํ ๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ค.
- ์ฐ๊ฒฐํ data ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฃผ์.
data class User (
val name: String,
val age: Int
)
@{}
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ ์ด์์ ์ปดํฌ๋ํธ์ ๋ณ์๋ฅผ ํ ๋นํ๋ค.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.khs.DataBinding.User" />
</data>
...
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
ย
3. ๋ฐ์ธ๋ฉ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
- ๋ ์ด์์ ํ์ผ์ DataBinding์ ์ ์ฉํ๋ฉด ์๋์ผ๋ก ๋ฐ์ธ๋ฉ ํด๋์ค๊ฐ ์์ฑ ๋๋ค.
- ๋ทฐ๋ฐ์ธ๋ฉ ํฌ์คํ
์๋ ์ธ๊ธํ ์นด๋ฉ ํ๊ธฐ๋ฒ์ผ๋ก ๋ณํ๋ ์ด๋ฆ์ผ๋ก ์์ฑ
- activity_main.xml ํ์ผ์ ๋ฐ์ธ๋ฉ ํด๋์ค ์ด๋ฆ์ ActivityMainBinding ์ผ๋ก ๋ณํ!
- ๊ธฐ์กด์ setContentView() ํจ์๋ฅผ DataBindingUtil.setContentView()๋ก ๋ณ๊ฒฝํ๋ค.
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.user = User("ํ๊ธธ๋", 20)
}
}
ย
๊ธฐ๋ณธ์ ์ผ๋ก dataBinding ์ค์ ๊ณผ ์ฌ์ฉ๋ฒ์ ์ดํด๋ณด์๋ค. ๋ค์์๋ RecyclerView์์ dataBinding๋ฅผ ์ฌ์ฉํด ๋ด์ผ์ง.
ย
ย
[์ฐธ๊ณ ]
https://velog.io/@yxnsx/Android-DataBinding