[Android] ViewBinding

μ—…λ°μ΄νŠΈ:

πŸ‰ ViewBinding πŸ“Œ

λ·° 바인딩(ViewBinding)을 μ‚¬μš©ν•˜λ©΄ 뷰와 μƒν˜Έμž‘μš©ν•˜λŠ” μ½”λ“œλ₯Ό μ‰½κ²Œ μž‘μ„±ν•  수 μžˆλ‹€. λ·° 바인딩 속성이 ν™œμ„±ν™”λ˜λ©΄ 각 XML λ ˆμ΄μ•„μ›ƒ νŒŒμΌμ— λŒ€ν•œ 바인딩 ν΄λž˜μŠ€κ°€ μžλ™ μƒμ„±λœλ‹€. findViewById λ₯Ό λŒ€μ²΄ ν•œλ‹€.
Β 


πŸŽ€ ViewBinding μ„€μ •

  • λͺ¨λ“ˆ ν™œμ„±ν™” build.gradle νŒŒμΌμ— λ‹€μŒκ³Ό 같이 μΆ”κ°€ν•˜μž.
android {
    ...
    viewBinding {
        enabled = true
    }
}

Β 

πŸŽ€ ViewBinding μ‚¬μš©

  • λͺ¨λ“ˆμ—μ„œ λ·° 바인딩을 ν™œμ„±ν™” 해쀬닀면, 각 XML νŒŒμΌμ— λŒ€ν•΄ 바인딩 ν΄λž˜μŠ€κ°€ μƒμ„±λœλ‹€.
  • 바인딩 클래슀의 이름은 XML 파일의 이름을 카멜 ν‘œκΈ°λ²•μœΌλ‘œ λ³€ν™˜λ˜κ³  β€œBinding”이 μΆ”κ°€λœλ‹€.
    • activity_main.xml 파일의 바인딩 클래슀 이름은 ActivityMainBinding 으둜 λ³€ν™˜!
  • getRoot() λ©”μ„œλ“œ 포함
    λͺ¨λ“  바인딩 ν΄λž˜μŠ€λŠ” ν•΄λ‹Ή λ ˆμ΄μ•„μ›ƒ 파일의 λ£¨νŠΈλ·°μ— λŒ€ν•œ 직접 μ°Έμ‘°λ₯Ό μ œκ³΅ν•œλ‹€.
  • μ•‘ν‹°λΉ„ν‹°μ—μ„œ setContentView에 루트뷰 μ μš©ν•˜κΈ°
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle) {
  suuper.onCreate(savedInstanceState)
  binding = ActivityMainBinding.inflate(layoutflater)
  setContentView(binding.root)
}

Β 

πŸŽ€ findViewById 와 차이점

  • Null safety
    λ·° 직접 μ°Έμ‘°μ΄λ―€λ‘œ 잘λͺ»λœ ID둜 Null pointer Exception λ°œμƒ μœ„ν—˜ μ—†λ‹€.
  • Type safety
    λ·° νƒ€μž…μ΄ μΌμΉ˜ν•΄μ„œ Class Cast Exception λ°œμƒ μ•ˆν•œλ‹€.
    Β 

πŸŽ€ DataBinding κ³Ό 차이점

  • 데이터 바인딩은 <layout> νƒœκ·Έλ₯Ό μ‚¬μš©ν•œ λ ˆμ΄μ•„μ›ƒλ§Œ 처리
  • λ·° 바인딩은 λ ˆμ΄μ•„μ›ƒ λ³€μˆ˜/ν‘œν˜„μ‹μ„ μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ XML의 데이터와 λ ˆμ΄μ•„μ›ƒ 바인딩 λͺ»ν•œλ‹€.
  • 데이터 바인딩은 클래슀λ₯Ό 생성할 λ•Œ λ£¨νŠΈλ·°μ— tag μ‚½μž…
  • λ·° 바인딩은 μ–΄λ…Έν…Œμ΄μ…˜ ν”„λ‘œμ„Έμ‹± μ‚¬μš©ν•΄μ„œ 더 λΉ λ₯΄κ²Œ 바인딩 클래슀 생성
  • viewBinding 은 λ‹¨μˆœ μž‘μ—…μ— μ ν•©ν•˜λ‹€!

Β 
Β 
[μ°Έκ³ ]
https://developer.android.com/topic/libraries/view-binding?hl=ko
https://charlezz.medium.com/view-binding-μ‚΄νŽ΄λ³΄κΈ°-df3526d909a7
https://velog.io/@jaeyunn_15/AndroidViewBinding-vs-DataBinding

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ: