반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- script
- 플러터
- 변수
- ios
- node.js
- Eclipse
- 코틀린
- SwiftUI
- android
- java
- php
- kotlin2.0
- express
- 설치
- Flutter
- 조건문
- 스나이퍼팩토리
- Kotlin
- jquery
- Coroutine
- 정보처리기사
- php개발
- node
- Flow
- kotlininaction
- 이클립스
- php변수
- 그림으로 배우는 서버구조
- 스터디
- 서버
Archives
- Today
- Total
mygomii
AAC (Android Architecture Components) - ViewModel, DataBinding, LiveData 본문
Android
AAC (Android Architecture Components) - ViewModel, DataBinding, LiveData
mygomii 2020. 9. 11. 20:15반응형
- DataBinding LiveData ViewModel 등 여러 라이브러리 제공, MVVM 패턴 구조 설계에 최적화되어 있음
MVVM(Model -View - ViewModel) 패턴
- View - 화면에 보이는 레이아웃 구조 담당, 보통 데이터의 변화를 감지하는 Observer를 가지고 있음
- ViewModel - View에 연결된 데이터와 명령을 구현하고 변경 알림 이벤트를 통해 상태의 변경을 View에 알림
- Model - 사용하려는 데이터를 가지고 있음
출처 : https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm
The Model-View-ViewModel Pattern - Xamarin
This chapter explains how the eShopOnContainers mobile app uses the MVVM pattern to cleanly separate the business and presentation logic of the app from its user interface.
docs.microsoft.com
1. DataBinding 이란
- 레이아웃 xml 파일에 data를 binding해서 사용할 수 있게 도와주는 라이브러리
2. 사용 방법
gradle
apply plugin: 'kotlin-kapt'
android {
...
dataBinding {
enabled true
}
}
1. LiveData 란?
- data의 변경을 관찰할 수있는 라이브러리
- 안드로이드 생명 주기를 알고 있음, 활성 상태(started, resumed)일 때만 data를 업데이트 함
- LiveData 객체는 Observer 객체와 함께 사용, LiveData가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData는 등록된 Observer 객체에 변화를 알려주고, Observer의 onChanged() 메소드가 실행
2. 좋은 점
- Data와 UI의 동기화
- LiveData는 Observer 패턴을 따름, 안드로이드 생명 주기에 데이터가 변경될 때마다 Observer객체에게 알려줌
- 메모리 누수가 없음
- Observer 객체는 안드로이드 생명 주기와 결합되어 있기 때문에 destory 될 때마다 메모리에서 스스로 해제 함
- 중지된 활동으로 인한 비정상 종료 없음
- Observer의 생명 주기가 비 활성화인 경우 어떤 이벤트도 수신하지 않음
- 수명 주기를 수동적으로 처리하지 않음
- 자동으로 관리 해주기 때문
3. 사용 방법
빌드 환경 gradle
apply plugin: 'kotlin-kapt'
....
dependencies {
....
// Androidx Lifecycle
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
kapt "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
}
DataBinding, LiveData 사용 하기
- layout xml 은 최상단 루트를 layout 으로 감싸줌, 그 다음 data 요소, view 요소가 뒤따름
- activity_main.xml
<?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>
<import type="android.view.View" />
<import type="com.mackerly.mbest.network_settings.mvvmpratice.ui.main.MainViewModel" />
<variable
name="main"
type="com.mackerly.mbest.network_settings.mvvmpratice.ui.main.MainActivity" />
<variable
name="viewModel"
type="MainViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.title}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
- MainActivity
class MainActivity : AppCompatActivity() {
private val binding by binding<ActivityDetailBinding>(R.layout.activity_main)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java).apply {
title.value = "John Doe"
showToast.observe(lifecycleOwner) {
Toast.makeText(this@MainActivity, "버튼 클릭함!!!", Toast.LENGTH_SHORT).show()
}
}
binding.apply {
viewModel = this@MainActivity.viewModel
}
}
}
- MainViewModel
class MainViewModel : ViewModel() {
val title: MutableLiveData<String> by lazy { MutableLiveData<String>() }
fun onChangeName(str: String) {
title.value = str
}
}
참고
developer.android.com/topic/libraries/architecture/viewmodel?hl=ko
ViewModel 개요 | Android 개발자 | Android Developers
ViewModel을 사용하면 수명 주기를 인식하는 방식으로 UI 데이터를 관리할 수 있습니다.
developer.android.com
medium.com/hongbeomi-dev/aac를-사용하여-mvvm-pattern을-구현한-안드로이드-앱-만들기-1d6d73689bd0
AAC를 사용하여 MVVM Pattern을 구현한 안드로이드 앱 만들기
🧐 What is MVVM
medium.com
반응형
'Android' 카테고리의 다른 글
Android 디버그 브리지(adb) - Wi-Fi를 통해 기기에 연결 (0) | 2020.12.31 |
---|---|
DI (Dependency Injection) (0) | 2020.09.11 |
[Android] #다른 앱과 상호작용 (0) | 2019.01.07 |
[Android] #Uri scheme (앱에서 호출) (0) | 2018.11.28 |
[Android] #uri로 mime type 만들기 (1) | 2018.11.28 |