엄코딩의 개발 일지

 데이터 바인딩(DataBinding) 사용 목적


안드로이드에서 다양한 리소스( 예를 들면, layout, value, string 등)를 바인딩하는 것은 상당히 반복되는 코드가 많아 질 수


있고, 번거로울 수 있습니다. 물론, 코틀린을 사용하면 코틀린 extension을 사용하여 비교적 편리하게 리소스에 접근할 수 


있습니다.


하지만, 최근 패턴 사용에 대한 개발자들의 긍정적인 시선, 코드 분리를 통한 최적화의 방법으로 


버터나이프, 데이터바인딩 라이브러리를 사용하는 개발자가 많습니다. 


저 또한 최근 프로젝트를 진행하면서, 코드 분리 및 최적화를 위해 App에 MVVM 패턴을 적용하기로 했습니다.


제가 버터나이프 대신 데이터 바인딩을 사용하는 가장 큰 이유는 다음과 같습니다.


                 



첫 번째, 안드로이드에서 지원하는 데이터 바인딩과 다르게 버터나이프 (ButterKnife)는 Third Party 라이브러리입니다.


여기서 말하는 Third Party 라이브러리란


이와 같은 이유때문에 데이터 바인딩을 사용했을때 deprecated에 대한 우려를 저희는 걱정할 필요가 없습니다.



두 번째, 안드로이드에서 java, kotlin 코드를 통해서 했던 작업들을 xml에서 처리할 수 있기 때문에, View 자체에서 데이터


변경에 대한 동적 처리가 가능해집니다. 즉, View Model에 데이터만 남게 함으로써 View- ViewModel 분리가 용이합니다.




 데이터 바인딩(DataBinding) 사용


우선 데이터 바인딩 사용을 위해 build.gradle(app)에 다음 코드를 추가합니다.



코틀린에서는 추가로 kapt도 추가해주어야 합니다.    


apply plugin:'kotlin-kapt'


여기서 중요한 변경 사항이 있습니다. 예전에 데이터 바인딩을 할 때만해도 


kapt "com.android.databinding:compiler:$android_plugin_version" 와 같은 코드를 추가해야했습니다.


하지만 https://developer.android.com/topic/libraries/data-binding/start 확인해본 결과



위와 같은 내용을 확인할 수 있습니다. ( apply plugin:'kotlin-kapt' 코드는 넣어주셔야 합니다. )

이제 xml 파일에서 데이터 바인딩 적용 전, 적용 후 소스를 살펴보겠습니다.



- 데이터 바인딩 적용 전 xml 소스



텍스트뷰가 하나있는 간단한 xml 코드입니다.


데이터 바인딩을 사용하기 위해서 해당 xml의 최상위에 layout을 추가해야합니다.


- 데이터 바인딩 적용 후 xml 소스



data를 통해 MainActiviy를 객체화해서 사용할 수 있습니다. 해당 액티비티의 객체명을 통해 MainActivity 클래스의


변수나 메소드에 접근할 수 있고, 이를 통해 소스 코드를 줄일 수 있습니다. 


기존 데이터 바인딩 사용전, 통신을 통해 받아온 객체를 일일이 setText 해주던 것과는 다르게, 데이터 바인딩을 통해


xml 에서 위 작업을 대신할 수 있습니다.



 

레이아웃 내에 있는 "@{}" 구문을 사용하여 값을 부여할 수 있습니다.


이제 코틀린 코드상에서 데이터 바인딩을 적용해 보겠습니다.



메인에서 하게되는 작업은 간단합니다.


기존에 setContentView 대신에 DataBindingUtil을 통해 setContentView를 하시면됩니다.



user_name_tv 에는 "Seonoh", user_age_tv에는 27 값이 설정된 것을 확인할 수 있습니다. 


간단하게 살펴본 DataBinding 적용하는 방법이었습니다.



참고 사이트 : https://developer.android.com/topic/libraries/data-binding/start