목차: https://velog.io/write?id=45950adf-c91a-4ccc-a426-f616f037f857
데이터 결합 라이브러리 공홈: https://developer.android.com/topic/libraries/data-binding?hl=ko
UI와 데이터 소스를 결합할 수 있는 지원 라이브러리
ViewBinding이 성능이 우수함, findViewById만 대체할경우 viewBinding을 사용함
레이아웃 및 결합 표현식
레이아웃에서 변수 및 include 를 사용할 수 있는 기능을 제공
식별 가능한 데이터 객체 작업
데이터가 변경될 때 UI 새로고침에 신경쓰지 않아도 된다.
생성된 바인딩 클래스
결합 어뎁터
레이아웃 표현식으로 속성 또는 리스너를 설정하는 결합 어뎁터가 있다.
setText() 메서드나 setOnclickListener() 메서드를 호출하여 리스너를 클릭 이벤트에 추가할 수 있다.
아키텍처 구성요소에 레이아웃 뷰 연결
테스트와 유지관리가 쉬운 앱 디자인에 사용할 수 있다. (아키텍처 구성요소를 데이터 결합 라이브러리와 함께 사용하여 UI 개발을 단순화 할 수 있다.)
양방향 데이터 바인딩
속성의 데이터 변경사항을 받는 동시에 속성의 사용자 업데이트를 수신 대기하는 기능을 지원한다.
코드랩: https://developer.android.com/codelabs/android-databinding#0
Transformations : LiveData를 위한 Class로 데이터가 변하면서 조건에 따라 다른 데이터도 변경 시킬 때 유용하게 사용함
=> LiveData.map(), LiveData.switchMap() 으로 대체됨
private val _likes = MutableLiveData(0)
val likes: LiveData<Int> = _likes;
val popularity: LiveData<Popularity> = likes.map {
if (it < 3) {
Popularity.NORMAL
} else if (it in 4..5) {
Popularity.POPULAR
} else {
Popularity.STAR
}
}
아래는 MutableLiveData.map API 이다.
MediatorLiveData: 여러개의 LiveData를 묶어서 Observe가 가능하다.
fun <X, Y> LiveData<X>.map(
transform: (@JvmSuppressWildcards X) -> (@JvmSuppressWildcards Y)
): LiveData<Y> {
val result = MediatorLiveData<Y>()
result.addSource(this) { x -> result.value = transform(x) }
return result
}