본문 바로가기

개발/Android

[Android] ViewBinding vs DataBinding

viewbinding이란, view와 상호작용하는 코드를 더욱 쉽게 작성할수 있도록 도와줍니다.

모듈에

buildFeatures{
        viewBinding true
    }

 

를 작성함으로써 사용가능합니다. 

또는 , 

android {
        ...
        viewBinding {
            enabled = true
        }
    }

과 같이 사용합니다.

 

MainActivity단에 가서, 사용법은 먼저 val로써 binding을 선언해줍니다.

by lazy는 지연초기화인데, 이후에 다룰 예정입니다.

binding.root는 해당 참조하는 뷰를 가리킵니다.

class MainActivity : AppCompatActivity() {
    val binding by lazy {ActivityMainBinding.inflate(layoutInflater)}
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.button2.setOnClickListener {
            binding.textSay.text = "Hello, Kotlin!"
        }
    }
}

findviewbyId와의 차이점.

 

* null safety : findviewbyid와 다르게, 해당뷰에대해 직접 참조하므로 잘못된 뷰 ID로 인해 NPE(Null Pointer Exception)발생할 위험이 없습니다. 또한 다른 뷰의 동일 id를 참조할 일도 없겠습니다.

 

* Type safety: textView의 타입을 imageView라고 잘못 적어서 캐스팅하면 cast exception이 발생할 수 있다. 이를 방지해줌.

 

databinding과의 차이점.

 

databinding과 동일하게, 뷰를 직접 참조하는 바인딩 클래스를 생성합니다. 

허나, 

* 더 빠른 컴파일이 가능합니다 -> annotation 프로세싱의 일부만 사용하기 때문.

* tag처리된 xml사용 불필요.

-> 즉 단순 findviewbyid를 대체하기 위해서라면 viewbinding사용.

데이터 바인딩은 뷰 바인딩의 역할도 할 수 있을뿐더러 추가로 동적 UI 콘텐츠 선언, 양방향 데이터 결합도 지원. 

'개발 > Android' 카테고리의 다른 글

[Android] WebView 안드로이드에서 구현하기  (0) 2021.02.03