일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 옵저버 패턴
- designPattern
- El
- Functional Programming
- Design Pattern
- 싱글톤
- 추상팩토리패턴
- ㅋㅁ
- F
- Abstract Factory
- 디자인패턴
- 빌터패턴
- 추상 팩토리
- 프로토타입 패턴
- 코틀린
- 함수형프로그래밍
- builderPattern
- Kotlin
- ㅓ
- a
- 팩토리 메소드
- factory method
- 디자인패턴 #
- r
- Observer Pattern
- Singleton
- PrototypePattern
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
데이터 바인딩(DataBinding) 본문
왜 DataBinding 이 필요할까?
MVVM 패턴에서 DataBinding 및 LiveData(Observable)을 이용하여 MVP 패턴에서 View와 Presenter 간의 높은 의존성을 약하게 만들어야 되었다.
ViewModel은 View에 표현될 데이터를 관리 및 비지니스 로직을 처리한다.
이 데이터를 View과 관찰하고 하고 있다가 비즈니스 로직에 따라 데이터가 변경이 되면 즉시 반영할 수 있다.
ViewModel이 View에 대한 의존성을 갖지 않고 느슨하게 연결되려면 DataBinding가 필수적이다.
데이터 바인딩 기본.
모듈 수준 그레이들 파일에 build.gradle(Moudule: app) 데이터 바인딩 허용.
android {
dataBinding {
enabled = true
}
}
1. 바인딩할 뷰 (layout resource). xml의 최상위 태그를 <layout> 태그로 지정한다.
그러면 바인딩 클래스가 자동으로 생성된다.
예를 들면 activity_main_.xml 이라면 ActivityMainBinding 클래스가 자동생성이 된다.
2. <data> <variable> 태그를 통해 변수를 선언하면 자동 생성된 바인딩 객체의 멤버 변수로 데이터 바인딩이 된다.
바인딩 클래스는 내부에서 각 뷰 객체 를 미리 findViewById()를 호출한 결과를 캐싱해두기 때문에 Activity 또는 Fragment와 같은 UI 기반 클래스에서 View에 접근할 수 있다.
* findViewId() 의 호출은 View의 계층의 깊이가 클수록 비용이 많이드는 연산이다.
* Activity 또는 fragment에서 findViewById 가 없어져서 보일러 플레이트 코드를 줄일 수 있다.
3. 바인딩 표현식 @{viewModle. XXXX }을 통해 View에 데이터를 전달할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="패키지명.ViewModel"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
public class MainActivity extends AppCompatActivity {
private static ActivityMainBinding mBinding;
private ViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 바인딩클래스 참조 얻기.
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// 바인딩 클래스를 이용하여 button 참조 얻기
Button button =mBinding.button;
// ViewModel 바인딩 하기.
viewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory
.getInstance(this.getApplication()))
.get(ViewModel.class);
mBinding.setViewModel(viewModel);
}
}
참고자료 (바인딩객체를 참조 하는 여러 방법)
상황과 UI기반 클래스에 따라 살짝 다른 방법을 사용한다.
'Android Jetpack Architecture > DataBinding' 카테고리의 다른 글
DataBinding Component 사용하기 (0) | 2020.08.07 |
---|---|
DataBinding 자동객체 전환 (0) | 2020.08.07 |
DataBinding 이벤트 처리하기 (0) | 2020.08.07 |
DataBinding 표현식 정리 (0) | 2020.08.07 |
Binding Method BindingAdapter (0) | 2020.08.05 |