[Android] Databinding Library

in #kr5 years ago



Databinding Library

Android 개발을 하며 가장 귀찮고 필요없는 boilerplate code의 쉽상이며
비용처리도 큰 findViewById() 메소드를 도와주는 library가 나왔다. 오ㅐ 이제야 온것이냐. (알고보니 나온지 꽤됐다... 열공하자...)

최근 AAC(Android Architecture Component) 관련 포스팅을 해서 더 알아보고자 샘플 라이브러리를 찾던중 매우 좋은 샘플을 찾았다.
(Github Sample)[https://github.com/googlesamples/android-architecture-components]
RxJava 와 Kotlin, Dagger2, Espresso ... AAC... 다 내가 찾던거다.

간단히 Databinding을 소개하기위해 BasicSample을 참고하여 정리해보자.

구글문서_DatabindingLibarary 에 따르면

데이터 바인딩 라이브러리는 유연성과 폭넓은 호환성을 모두 제공하는 지원 라이브러리로, Android 2.1(API 레벨 7 이상)까지 Android 플랫폼의 모든 이전 버전에서 사용할 수 있습니다.
데이터 바인딩을 사용하려면 Android Plugin for Gradle 1.5.0-alpha1 이상이 필요합니다.

빌드 환경

build.gradle 파일에 몇줄만 추가 하면 된다.


android {
    ....
    dataBinding {
        enabled = true
    }
}

데이터 바인딩

기본적으로, Binding 클래스는 레이아웃 파일의 이름을 기준으로 생성되어 파일 이름을 파스칼 표기법(Pascal Case: 합성어의 첫 글자를 대문자로 표기)으로 변환하고 그 뒤에 "Binding"을 접미사로 붙인다.
레이아웃 파일은 list_fragment.xml이고, 따라서 생성된 클래스는 ListFragmentBinding이다. 이 클래스는 레이아웃 속성(예: isLoading 변수)에서 레이아웃의 View까지 모든 바인딩을 유지하고 바인딩 식에 대해 값을 할당하는 방법을 알고 있다.
code1

데이터 바인딩 레이아웃 파일

데이터 바인딩 레이아웃 파일은 약간 달라서 layout의 루트 태그로 시작하고 그 뒤에 data 요소와 view 루트 요소가 나온다.
data 내에 있는 isLoading 변수는 해당 레이아웃 내에서 사용할수 있는 속성에 대한 설명이며 레이아웃 내에 있는 식은 "@{}" 구문을 사용하여 특성 속성에 기록된다.
code2

이벤트 처리

데이터 바인딩을 사용하여 뷰에서 발송되는 이벤트를 처리하는 식을 작성할 수 있다.
code3







나는 주로 Butterknife를 사용하고 있다.

Butterknife는 유지보수 코드를 (ex: findViewById(), onClick()...) 큰 수고비용없이 변환 가능하고, 가독성 역시 기존 코드들을 해치지 않을것이라고 본다.

물론 개인적인 생각일뿐 의견을 다분할수 있다.

그러나 Databinding을 정리하고 알아보고 나니, databinding 의 적용은 많은 부분에서의 변함이 있을것이라고본다.

우선 layout xml 자체 부터 변환을 해야하니, 파일수만해도 여러개가 되는것을 볼수있다.



AAC 와 함께 적용했을때 빛을 보는 라이브러리같다.
새로운 프로젝트에는 가볍게 적용하여 시작해보면서 살펴봐야하겠다.


Sort:  

Congratulations @daeun9294, this post is the eighth most rewarded post (based on pending payouts) in the last 12 hours written by a Dust account holder (accounts that hold between 0 and 0.01 Mega Vests). The total number of posts by Dust account holders during this period was 3026 and the total pending payments to posts in this category was $539.95. To see the full list of highest paid posts across all accounts categories, click here.

If you do not wish to receive these messages in future, please reply stop to this comment.

Coin Marketplace

STEEM 0.22
TRX 0.07
JST 0.027
BTC 19526.10
ETH 1066.14
USDT 1.00
SBD 2.89