Goodbye findViewById...
안드로이드 개발 시 layout에서 view를 가져다 쓰기 위해서는 findViewById를 통해서 사용해 왔습니다. 당연히 지금은 이 findViewById가 보일플레이트 코드가 되고 있습니다. 기본적인 코드이기는 하나 요즘 안드로이드 개발 트렌드??에서는 이런 보일플레이트 코드를 줄이고 간결한 코드를 구현하는 것이 제가 생각하는 트렌드라고 보고 있습니다.
이런 보일플레이트 코드를 줄이기 위해서 가장 많이 사용하고 있는 라이브러리는 Jake Wharton 형님의 ButterKnife가 아닐까 합니다. findViewById의 코드를 @Annotation방법으로 간단하게 해결했습니다.
findViewById는 @BindView 로.. setOnClickListener 부분은 @OnClick 등으로 간단하게 하결해서 사용했습니다.
그런데 여기서 view에서 대해서 binding할 때 하나씩 일일이 사용하는 것들에 대해서 다 처리를 해줬어야 합니다. 그렇다면 한번에 다 처리하는 방법은 없을까요?
Android의 Data Binding Library를 이용해서 한번에 다 처리를 할 수 있습니다.
Android 2.1 (API level 7+)
Android Plugin for Gradle 1.5.0-alpha1 or higher is required.
이라서 거의 대부분 버전에서 사용할 수 있습니다.
gradle에서는 android 블럭 안에다가 아래와 같이 넣으면 됩니다.
DataBinding을 사용하기 위해서는 layout에서도 약간 수정이 필요합니다. <layout>...</layout> tag로 감싸져 있어야 합니다.
기본적은 layout의 코드가 아래와 같다면
DataBinding을 사용하기 위해서는
이와 같이 하면 됩니다.
그런데 id가 text_title -> textTitle 로 camelCase 로 변경되었습니다. 이건 뒤에 설명하도록 할게요.
이렇게 하면 layout을 사용할 준비가 끝났습니다.
그럼 기본적은 activity code는
아래와 같이 binding하는 부분으로 변경됩니다.
ActivityDatabindingBinding...에 inflate 된 layout의 모든 view들을 가지고 있게 됩니다.
그리고 사용하는 부분을 보면 dataBinding.textTitle 이 됩니다. @+id/...로 가지고 된 id가 view 자체가 되기 때문에 camelCase를 이용하게끔 권장하고 있습니다.
findViewById로 했던 코드가 정말 간결해졌습니다. 이것만으로는 ButterKnife보다도 더 간단하다고 할 수 있겠네요.
여기까지 우선 DataBinding으로 기존 findViewById의 보일플레이트 코드를 줄이는 방법을 보였습니다. 남은 것들이라면 onClick곽 같은 event handling과.. 더 나아가 mvp 패턴 개발인데.. 지금 이걸로 보면 mvp패턴 개발 방법은 정말 간결히 진행될 거 같아 보입니다. 이 두가지 내용은 다음 장에서