[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

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: