๐ฏ DataBinding
- xmlํ์ผ์ Data๋ฅผ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ฃผ๋ Android JetPack ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋์ ๊ธฐ๋ฅ
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๊ฒฐํฉ์ ์ง์
์๋ฐฉํฅ ๋ฐ์ดํฐ ๊ฒฐํฉ
- When properties in the model get updated, so does the UI.
- model ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ui๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ์์
- model ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ui๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ์์
- When UI elements get updated, the changes get propagated back to the model.
- ui ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ๊ทธ ๋ด์ฉ์ด model์ ์ ์ฉ๋๋ ์์
- ui ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ๊ทธ ๋ด์ฉ์ด model์ ์ ์ฉ๋๋ ์์
- When properties in the model get updated, so does the UI.
ํน์ง
- Databinding์ ์ฌ์ฉํ๋ฉด findViewById(), ๋ฒํฐ๋์ดํ๋ฅผ ์ฐ์ง ์์๋ xml์ ๋ง๋ View๋ค์ ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋ค.
- Data๊ฐ ๋ฐ๋๋ฉด ์์์ ๋ฐ๋ Data๋ก View๋ฅผ ๋ณ๊ฒฝํ๊ฒ ํ ์๋ ์๋ค. (์ต์ ๋ธ ์ฌ์ฉ์)
- RecyclerView์์ ๊ฐ๊ฐ์ item์ ์ธํ ํด์ฃผ๋ ์์ ๋ xml์์ ๋ค ์จ์ฃผ๋ฉด ์์์ ์ฒ์ฒ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
- ๊ตฌ๊ธ์ ๊ถ์ฅ์ฌํญ
์ฌ์ฉ
Gradle ์ค์
- android 4.0 ์ด์
android { ... buildFeatures { dataBinding = true } }
- android 3.6 ~ 4.0
android { ... dataBinding { enabled = true } }
MainActivity
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 = UserProfile("์ง์", "์ด")
}
}
- infalte
- ์์ฑ๋ binding ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์๋ ๋ฉ์๋
- binding.root
- ํ์ฌ viewBinding ๊ฐ์ฒด์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ layout์ ๋ฐํ
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.example.temp.UserProfile" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.lastName}" />
</LinearLayout>
</layout>
- dataBinding์ ๊ฐ์ฅ ๋ฐ๊นฅ์
<layout>
ํ๊ทธ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๊ณ<data>
๋ฅผ ํตํด view์ ๋ณด์ฌ์ง ๊ฐ์ ์ ์ธํ๋ค. - view์์๋
@{}
๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๋ฟ๋ฆฐ๋ค.@{}
๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐํธ์์ผ๋ก๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.@{(userProfile.gender == UserProfile.GENDER_MALE) ? "๋จ์ฑ" : "์ฌ์ฑ"}
๐ฏ ViewBinding
- view์ ์ํธ ์์ฉํ๋ ์ฝ๋๋ฅผ ๋์ฑ ๊ฐํธํ๊ฒ ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ
- ์ด๋ฅผ ํ์ฉํ์ฌ
findViewById
๋ฅผ ๋์ฒดํ ์ ์๋ค. - ๋ง์ด ์ฌ์ฉํ๋ DataBinding์์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ๋จ์ํ View์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ด์ ์ฌ์ฉํ์
- ์ด๋ฅผ ๋ณธ ๊ตฌ๊ธ์ด View์ ๋ํ ์ฐธ์กฐ ๋ชฉ์ ์ผ๋ก ViewBinding์ ์ง์ํ๊ธฐ ์์ํจ
ํน์ง
- Null ์์
- ๋ทฐ์ ์ง์ ์ฐธ์กฐ๋ฅผ ์์ฑํ๋ฏ๋ก ์ ํจํ์ง ์์ ๋ทฐ ID๋ก ์ธํด null ํฌ์ธํฐ ์์ธ๊ฐ ๋ฐ์ํ ์ํ์ด ์์
- ๋ ์ด์์์ ์ผ๋ถ ๊ตฌ์ฑ์๋ง ๋ทฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฒฐํฉ ํด๋์ค์์ ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ ํ๋๊ฐ
@Nullable
๋ก ํ์
- ์ ํ ์์
- ๊ฐ ๋ฐ์ธ๋ฉ ํด๋์ค์ ์๋ ํ๋์ ์ ํ์ด XML ํ์ผ์์ ์ฐธ์กฐํ๋ ๋ทฐ์ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ณํ ์์ธ๊ฐ ๋ฐ์ํ ์ํ์ด ์๋ค.
- ๋น ๋ฅธ ์ปดํ์ผ ์๋์ ๋ฐ๋ก xml ํ์ผ์ ํ๊ทธ๊ฐ ํ์ํ์ง ์๊ณ ์๋์ผ๋ก ์ ์ฉ๋๋ฏ๋ก ์ฌ์ฉ ํธ์์ฑ์ด ์๋ค.
- Data Binding๊ณผ ๋น๊ตํ์ ๋ ๋ ์ด์์ ๋ณ์ ๋๋ ๋ ์ด์์ ํํ์์ ์ง์ํ์ง ์์ผ๋ฏ๋ก XML ๋ ์ด์์ ํ์ผ์์ ์ง์ ๋์ UI ์ฝํ ์ธ ๋ฅผ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์.
- ์๋ฐฉํฅ ๋ฐ์ดํฐ ๊ฒฐํฉ์ ์ง์ํ์ง ์์ต๋๋ค.
- DataBinding์์๋ ์ฝ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ xml์ ์ ์ฉ์ด ๊ฐ๋ฅํ์ผ๋ ViewBinding์์๋ ๋ถ๊ฐํจ
์ฌ์ฉ
Gradle ์ค์
- android 4.0 ์ด์
android { ... buildFeatures { viewBinding = true } }
- android 3.6 ~ 4.0
android { ... viewBinding { enabled = true } }
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.txtSample.text = "View Binding Sample"
}
}
- infalte
- ์์ฑ๋ binding ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์๋ ๋ฉ์๋
- binding.root
- ํ์ฌ viewBinding ๊ฐ์ฒด์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ layout์ ๋ฐํ
activity_main.xml
<LinearLayout ... >
<TextView android:id="@+id/txt_sample" />
</LinearLayout>
dataBinding๊ณผ viewBinding์ ์ฐจ์ด
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ๋ ์ด์์๋ง ์ฒ๋ฆฌ - ๋ทฐ ๋ฐ์ธ๋ฉ์ ๋ ์ด์์ ๋ณ์ ๋๋ ๋ ์ด์์ ํํ์์ ์ง์ํ์ง ์์ผ๋ฏ๋ก XML์ ๋ฐ์ดํฐ์ ๋ ์ด์์์ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
- ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํด๋์ค๋ฅผ ์์ฑํ ๋ ๋ฃจํธ๋ทฐ์ tag๋ฅผ ์ฝ์ ํ๋๋ฐ ๋ทฐ ๋ฐ์ธ๋ฉ์ ๊ทธ๋ฐ ์์ ์ด ์๋ค.
- ๋ทฐ ๋ฐ์ธ๋ฉ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๋ณด๋ค ์ด๋ ธํ ์ด์ ํ๋ก์ธ์ฑ์ ์ผ๋ถ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ธ๋ฉ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
'Android > Android ๊ธฐ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Json & Gson (0) | 2022.04.18 |
---|---|
Android: Fragment (0) | 2022.03.23 |
Android: Data Class (0) | 2022.03.23 |
Android: Intent (0) | 2022.03.23 |
Android: Activity (0) | 2022.03.23 |
์ต๊ทผ๋๊ธ