Study/Android

안드로이드 데이터 바인딩

hegunhee 2022. 1. 17. 16:34

Databinding이란?

xml파일에 Data를 연결(binding)해서 사용할 수 있게 도와주며 Android JetPack라이브러리의 하나의 기능 입니다.

data binding은 왜 사용할까?

데이터 바인딩을 사용하면 데이터를 UI 요소에 연결하기 위해 필요한 코드를 최소화할 수 있습니다.

data binding을 사용했을 때, 당장 가시적으로 보이는 장점들을 꼽자면 다음과 같습니다.

  • findViewId() 를 호출하지 않아도, 자동으로 xml에 있는 View 들을 만들어줍니다.
  • RecyclerView에 각각의 item을 set 해주는 작업도 자동으로 진행됩니다.
  • data가 바뀌면 자동으로 View를 변경하게 할 수 있습니다.
  • xml 리소스만 보고도 View에 어떤 데이터가 들어가는지 파악 가능합니다.
  • 코드 가독성이 좋아지고, 상대적으로 코드량이 줄어듭니다.
    또한 데이터 바인딩은 MVP 또는 MVVM 패턴을 구현하기 위해 유용하게 사용됩니다.

그러나, data binding이 장점만 있는것은 아닙니다.
클래스 파일이 많이 생기고, 빌드 속도가 느려지는 등 단점들도 존재합니다.
그래서 data binding은 data binding 단독으로 사용하는 것보다 MVVM 또는 MVP 아키텍처와 함께 사용해야 빛을 발합니다.

two-way-binding

데이터바인딩으로 버튼을 누르면 에딧텍스트의 text를 textView에 옮기는 작업을 진행하려고 했지만 옮겨지지 않을 뿐 아니라 바인딩한 객체의 데이터또한 변하지 않았습니다.
왜 그런가 찾아보니 기본적인 데이터 바인딩은 단방향 으로만 작동하는것이었습니다. 즉 뷰가 바인딩한 객체의 데이터 변화는 옵저빙해 감지하는데 바인딩한 객체는 뷰의 데이터 변화를 감지하지 못했습니다.

그렇기때문에 뷰의 데이터 변화도 감지못해 객체의 데이터가 변화하지 않은것이었습니다. 그러므로 양방향으로 바꿔줘야했습니다.
바꿔주는 방법은 android.text = "@{viewmodel.secondName}" 에서 android.text = "@={viewmodel.secondName}"으로 바꿔주면 됩니다.
그리고 불변성을 가지고있는 데이터 타입이면 mutable으로 바꿔줘야됩니다.

'Study > Android' 카테고리의 다른 글

BindingAdapter 적용  (0) 2022.04.13
Android의 Context  (0) 2022.04.04
콘텐츠 프로바이더  (0) 2022.01.04
바인딩 서비스  (0) 2021.12.29
서비스 컴포넌트  (0) 2021.12.24