AAC 중 DataBinding에 관하여 포스팅을 해볼까 합니다.
DataBinding 드로이드 애플리케이션에서 UI 구성 요소를 애플리케이션 데이터 소스에 결합할 수 있는 기술입니다. 이 기능을 사용하면 XML 레이아웃 파일에서 직접 데이터 객체에 접근할 수 있으며, 코드의 간결성과 유지보수성을 크게 향상시킬 수 있습니다.
이렇게 설명한다면 사람들은 ViewBinding과 무슨 차이가 있냐고 의문을 가질수있습니다. 이 둘의 차이는 XML 레이아웃 파일에서 직접 데이터 객체에 접근할 수 있다는 점입니다. 이는 큰차이입니다. ViewBinding의 장점은 더 이상 View를 findViewById를 통하여 가지고 올필요가 없어진 것입니다. 이것만으로 코드의 양이 줄어 좀 더 간결하고 성능의 향상을 볼 수 있었습니다. DataBinding은 추가로 xml에서 코드에 접근하여 해당값을 사용할 수 있게 됩니다. 이렇게 되면 매 번 값이 바뀔 때마다 View의 값을 바꿔줄 필요가 없어집니다. 이처럼 DataBinding은 매우 좋아 보이는 기능처럼 보입니다. 그렇지만 DataBinding에도 단점이 있습니다. 빌드시간이 증가하고 변경되었을 때 디버깅 또한 힘들어집니다. 또한 빈번한 데이터 변경이 UI 업데이트를 과도하게 유발하거나 무거운 연산을 레이아웃 표현식에서 직접 수행하면 성능 저하가 발생할 수 있습니다.
DataBinding은 안드로이드 개발에서 매우 유용한 도구이지만, 단점과 한계를 이해하고 사용하는 것이 중요합니다. 적절한 상황에서 사용하면 코드의 간결성, 유지보수성, 성능을 향상시킬 수 있지만, 모든 프로젝트나 모든 상황에서 항상 최선의 선택은 아닙니다. 단점과 한계를 잘 이해하고 적절하게 대처하는 것이 중요합니다.
장점과 단점을 알았으니 DataBinding의 적용과 응용을 알아봅시다.
DataBinding은 사용하기에 앞서 app단의 gradle파일에서 DataBinding을 활성화시켜줘야 합니다.
android {
...
buildFeatures {
dataBinding = true
}
}
이러면 DataBinding을 사용할수있게됩니다.
DataBinding은 사용하려면 크게 2가지가 필요합니다. xml에서 DataBinding을 할 클래스를 알려줘야 합니다.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="user"
type="com.example.User" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
위의 예시 xml처럼 layout, data, variable 태그가 보일 것입니다.
layout을 DataBinding을 사용할 것이라는 것을 알려주고 그 내부에 data 태그를 사용해 사용될 요소들을 variable 태그로 추가할 수 있습니다. 이때 variable 태그에 name 변수명이라 생각하시면 되고 type에 적힌 디렉터리 주소가 해당 변수의 타입이라고 생각하시면 됩니다. 이때 변수 같은 경우 단일이 아닌 복수개의 변수들을 만들 수 있습니다.
이제 xml이 사용될 액티비티, 프래그먼트, 어댑터등에서 데이터바인딩을 연결해 주면 됩니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
//val binding: ActivityMainBinding = ActivityMainBinding.inflate(getLayoutInflater())
//setContentView(binding.root)
val user = User("John Doe", 30)
binding.user = user
}
}
바인딩의 연결은 DataBindingUtil을 이용해 xml이 사용되는 주체와 xml의 id를 연결해 주면 됩니다. 이후 xml에 선언하 변수를 초기화해줍니다. 또는 해당 xml로 생성된 Binding class를 이용하여 만드는 방법도 있습니다.
이제 DataBinding의 연결방법이 끝났습니다. 코드에서는 binding을 이용하여 작업을 하면 되고 xml에서는 선언해 준 변수를 가지고 작성하면 됩니다.
<TextView
android:id="@+id/userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
이런 식으로 user에 접근하여 사용할 수 있습니다.
참고
'안드로이드 > AAC(Android Architecture Components)' 카테고리의 다른 글
[AAC] Navigation의 정의와 적용 (0) | 2024.06.10 |
---|---|
[AAC] Lifecycle 정의와 활용 (0) | 2024.06.07 |
[AAC] LiveData의 정의와 사용 (0) | 2024.06.06 |
[AAC] DataBinding 고급 기능 (1) | 2024.06.05 |
왜 앱개발자 공고 AAC사용 경험을 우대할까? (0) | 2024.06.03 |