데이터 바인딩이란 UI와 앱 데이터를 선언적으로 결합하기 위해 사용하는 라이브러리다.
일반적으로는 레이아웃 파일에 선언한 뷰를 액티비티나 프래그먼트 등의 컴포넌트에서 참조하고 제어한다.
하지만 데이터 바인딩을 사용하면 레이아웃 파일에 뷰를 선언하는 동시에 데이터 변수를 참조할 수 있다.
이렇게 하면 데이터가 변경됨에 따라 뷰가 자동으로 갱신되도록 만들 수 있다.
기본적으로 뷰 바인딩 기능을 포함하므로 레이아웃 파일의 데이터 변수뿐 아니라 뷰를 참조할 수도 있다.
따라서 findViewById()
같은 UI 프레임워크를 여러 번 호출하지 않아도 된다.
또한 데이터 바인딩은 MVVM 아키텍처 패턴에서 중요한 역할을 한다.
데이터 바인딩 사용 설정
뷰 바인딩과 마찬가지로 모듈 레벨 build.gradle
파일에서 사용 여부를 설정한다.
android {
...
buildFeatures {
dataBinding = true
}
}
사용 설정을 하고 나면 각 레이아웃 파일에 대한 바인딩 클래스가 생성된다.
바인딩 클래스의 이름은 레이아웃 파일 이름을 파스칼 케이스로 변환하고 끝에 Binding을 붙인 것이다.
데이터 바인딩 사용하기
일반적으로 LinearLayout
, ConstraintLayout
등의 뷰 컨테이너를 루트 요소로 사용한다.
하지만 데이터 바인딩을 사용할 경우 <layout>
을 루트 요소로 사용해야 한다.
<layout>
요소는 크게 두 부분으로 나뉜다.
하나는 바인딩할 데이터 및 변수에 대한 정보를 포함하는 <data>
요소, 나머지 하나는 UI를 나타내는 뷰 컨테이너 요소다.
변수 선언
데이터 변수는 레이아웃 파일의 <data>
요소 안에 <variable>
요소로 선언한다.
<variable>
요소는 다음 속성들을 포함한다.
name
변수의 이름type
변수의 타입. 패키지명이 포함된 클래스 경로다.
선언한 변수에 대한 게터 및 세터는 데이터 바인딩 클래스 안에 자동으로 만들어진다.
데이터 바인딩 클래스 인스턴스화
액티비티나 프래그먼트에서 데이터 바인딩 클래스를 인스턴스화하여 사용한다.
바인딩 클래스의 정적 메서드인 inflate()
나 bind()
를 사용하는 것이 일반적이지만 바인딩 타입을 바로 알 수 없는 경우 DataBindingUtil
클래스의 정적 메서드를 사용할 수도 있다.
예를 들어 액티비티에서는 다음처럼 데이터 바인딩을 사용할 수 있다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 일반적인 경우
val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// DataBindingUtil을 사용하는 경우
val binding: ActivityMainBinding = DataBindingUtil.setContentView(
this, R.layout.activity_main
)
}
}
바인딩 표현식 사용하기
레이아웃 파일에서 "@{}"
구문을 사용하여 <data>
요소에서 선언한 변수를 참조할 수 있다.
자세한 표현식 문법은 다음 가이드를 참고하자.
'Android' 카테고리의 다른 글
데이터 바인딩 (3) : 바인딩 어댑터 (0) | 2022.11.03 |
---|---|
데이터 바인딩 (2) : 이벤트 처리 / Observable (0) | 2022.11.01 |
컨텐츠 프로바이더 (0) | 2022.09.19 |
JobScheduler로 백그라운드 작업 예약하기 (0) | 2022.09.05 |
서비스 (3) : 시작되는 서비스 (0) | 2022.08.29 |