JetPack 데이터 결합

day_0893·2023년 8월 26일

JetPackTutorial

목록 보기
2/9

목차: 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
}

0개의 댓글