MVVM AAC Databinding 사용법(1.세팅편)
해당 문서는 안드로이드 공식 문서를 기반으로 만들어졌습니다.
공식문서: https://developer.android.com/topic/libraries/data-binding/?hl=ko
최종적으로는 사용자의 프로필을 출력하는 앱을 만들어보도록 하겠습니다.
Jetpack AAC(Android Architecture Components 이하 AAC)를 이용하기 위해서는 기본 안드로이드 개발지식이 필요합니다. 때문에 안드로이드에 대한 기본 지식이 있다는 가정하에 포스팅을 진행하도록 하겠습니다.
개발의 절반은 세팅이라고 했습니다.
1편에서는 데이터바인딩을 이용하기 위한 세팅을 진행하고,
2편 이후에는 상세 구현방법을 설명하도록 하겠습니다.
안드로이드 라이브러리를 사용할때는 최소 호환버전을 확인하는게 매우 중요합니다. 구현을 해놓고 최소 호환 버전이 맞지 않으면 모두 제거해야 되는 경우가 부지기수로 발생합니다.
데이터 바인딩 라이브러리는 유연성과 폭넓은 호환성을 모두 제공하는 지원 라이브러리로, Android 2.1(API 레벨 7 이상)까지 Android 플랫폼의 모든 이전 버전에서 사용할 수 있으므로 거의 모든버전에 사용 가능하다고 볼 수 있습니다.(저는 7.0 이하 기기 본적도 없습니다.)
또한 Android Plugin for Gradle 1.5.0-alpha1 이상이 필요합니다.
1. 안드로이드 개발의 시작! Gradle Setting
생각보다 매우 간단합니다.
AAC중 거의 유일하게 implementation 코드가 필요 없습니다. 그 이유는 databinding enabled를 true로 변경하면 컴파일러가 컴파일될때 자동으로 필요한 바인딩 클래스를 작성해주기 때문입니다. 이와 비슷한 라이브러리는 Butterknife가 있습니다.(버터나이프는 라이브러리를 이용을 합니다.)
2. 레이아웃 세팅
우리가 프로잭트를 처음 만들면 생성되는 Hello world에 데이터바인딩 세팅을 하였습니다.(코드 간소화를 위하여 레이아웃을 FrameLayout으로 변경하였습니다.)
기존 코드와의 변경점이 보이시나요???
첫번째는 ViewGroup에 속해있는 레이아웃(FrameLayout 등)을 루트태그로 사용하는것이 아니라 layout을 루트태그로 사용하고 있다는 점입니다.
layout 태그는 하나의 레이아웃만 자식 뷰로 가질 수 있으며(NestedScrollView와 비슷)두개이상의 레이아웃을 자식뷰로 선언 할 경우 아래와 같은 오류를 내뱉습니다.
data binding error ****msg:Only one layout element and one data element are allowed.
오류가 나는 레이아웃구조는 아래와 같습니다.
두번째는 data태그입니다. (세팅이라고 하기는 좀 그렇지만 데이터바인딩을 사용하는 가장 큰 이유이기 때문에 세팅으로 넣었습니다.)
User클래스는 간단한 데이터 클래스로 아래와 같습니다.
data 태그는 레이아웃에서 사용하고 싶은 오브잭트의 구성요소들을 직접 사용할 수 있습니다. 코드가 이해하는데 더 빠르겠죠???
이로써 레이아웃 세팅도 끝이났습니다.
3. 액티비티 세팅
액티비티 세팅을 하기전에 Build->Rebuild Project를 해주어야 합니다.(데이터바인딩의 거의 유일한 단점이지만 매우 귀찮습니다.) 그 이유는 위에 설명한것 처럼 컴파일러가 자동으로 생성해주는 바인딩 클래스가 컴파일할때 생성되기 때문입니다.
자동으로 생성된 Binding 클래스는 다음과 같은 규칙을 따릅니다.
- Binding 클래스는 레이아웃 파일의 이름을 기준으로 생성되어 파일 이름을 파스칼 표기법으로 변환하고 그 뒤에 “Binding”을 접미사로 붙입니다.
- 컴포넌트아이디는 “_”를 기준으로 카멜 표기법으로 변환됩니다.
xml이름이 activity_main인 경우 ActivityMainBinding으로 자동 생성됩니다.
컴포넌트 id값이 tv_sample일 경우 tvSample로 자동 생성됩니다.
선언방식은 아래와 같으며 Activity, Fragment, Adapter의 선언방식은 각각 다릅니다.(예제는 Activity만 설명하도록 하겠습니다.)
액티비티 세팅은 매우 간단합니다.
DataBindingUtil클래스를 통하여 레이아웃을 Binding 하고, binding 인스턴스를 통해 값을 세팅하면 됩니다.
마무리
해당포스팅은 간단한 세팅에 관한 부분이며, 아직까지는 데이터 바인딩을 왜 써야하는가에 대해서 의문인 분들이 많으실 겁니다. 향후 포스팅에서 좀더 상세한 내용을 다뤄보도록 하겠습니다.
전체 소스코드는 깃허브에 올려두도록 하겠습니다.
https://github.com/gus0000123/DatabindingSample
(태그명: Android-Jetpack-Databinding-사용법(1.세팅편))
이상 안드로이드 개발자 이종현이었습니다.
재밌게 읽으셨다면 👏🏻눌러 주시는 것도 잊지말아주세요~ 저에게 큰 힘이됩니다. :)
읽어주셔서 감사합니다~