Databinding
선언적 형식으로 레이아웃 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리
Kotlin Extension으로 findViewById를 사용하지 않고, layout에 선언된 id를 가져올 수 있었다.
하지만 레이아웃에서 선언한 View가 코틀린 파일의 객체를 읽고 데이터를 출력해주지 않았다.
코틀린에서 직접 데이터를 View에 설정해줘야 했다.
DataBinding은 코틀린에서 레이아웃을, 레이아웃에서 코틀린의 데이터를 직접 참조하는 라이브러리다.
코틀린에서 레이아웃 파일에 의존적인 부분이 많이 사라지고 MVVM 등의 패턴과 함께 사용할 수 있다.
< 사용예시 >
화면에 보여줄 data class를 만든다음,
layout.xml에서 data class에서 보여줄 field를 @{}로 표시하고
ex) android:text = "@{dataClass.memberVariable}"
Activity에서 DataBindingUtil로 inflate한다. (기존 사용방식도 가능하다.)
그다음, xml에서 data로 선언한 변수에 값을 assign 한다.
ex) binding.dataClass = dataClass
그리고 Databinding은 선언된 function 또한 xml에서 호출할 수 있다.
이때 메서드를 호출할 때는 ::이나 .으로 부를 수 있다.
ex) android:onClick = "@{variableName::functionName}"
※ Observable
Observable 데이터 객체 : 데이터의 변경사항을 감지하고 알려주는 객체
=> 데이터가 변경되었을 때 UI를 자동으로 갱신
3가지 방법
1. ObservableField 사용
2. Observable 컬렉션 사용
3. Observable 인터페이스를 구현하는 클래스 사용
Databinding은 선언적 형식으로 UI 구성요소를 앱의 데이터 소스와 결합할 수 있게 해준다.
장점
- findViewById를 하지 않아도 xml과 view를 연결
- view와 data가 양방향 일치
- dto를 섲렁하면, RecycdlerView의 각 item에 데이터 넣을 수 있음
- 상대적으로 코드량 줄어듬
단점
- 러닝커브가 존재
- 자동생성되는 파일이 많아 빌드 시간 소요, 디버깅이 어렵고 오류발생 대응 어려움
'안드로이드 > 정리' 카테고리의 다른 글
[Android] Room에 관해... (0) | 2021.10.30 |
---|---|
[Android] LiveData에 관해... (0) | 2021.10.29 |
[Android] Jetpack에 관해... [ ViewModel ] (0) | 2021.10.27 |
[Android] Coroutine에 관해... (0) | 2021.10.21 |
[Android] Thread에 관해... (0) | 2021.10.21 |