일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Swift Package Manager
- swift
- 상단 탭바
- 기존 앱
- notifychanged
- url 관찰
- 스크롤 탭
- scrolling tab
- UIPresentationController
- DataBinding
- DevelopmentRegion
- ViewBuilder
- swift #swift keychain #keychain 사용법
- Side Menu
- ios
- detect url
- Tuist
- Android
- convert base64
- List
- url 추적
- development language
- base64 변환
- UIViewControllerTransitioningDelegate
- transformation.map
- 개발자 면접
- GeometryReader
- SwiftUI
- pod install
- oberve url
- Today
- Total
버그 잡이
[Udacity android with kotlin] 5.Architectue - LiveData 본문
[Udacity android with kotlin] 5.Architectue - LiveData
버그잡이 2020. 6. 15. 13:071. LiveData란?
An observable data holder class that is lifecycle-aware
- 옵저버 패턴이 적용된 (=특정 대상을 관찰하고 변화를 인지하는) -> 최신화
- 생명 주기를 인식하는 (=메모리를 효율적으로 쓰는)
옵저버 패턴이 적용되면 아래 그림 처럼 대상(subject)을 관찰하고
대상(subject)의 상태가 변화했을때 이를 감지할 수 있다.
그 대상을 LiveData로 만들면 옵저버 패턴을 보다 쉽게 구현할 수 있고
UI의 생명주기에 따라서 생성/소멸한다. -> "생명주기가 onStarted, onResumed일때만 data를 update한다."
2. 사용법
1) LiveData 객체 생성 _ in ViewModel
val score = MutableLiveData<Int>()
2) data 변경(특정 이벤트 시) _ in ViewModel
fun onSkip(){
score.value = score.value - 1
}
3) UI에서 옵저버 설치 _ in Activity/Fragment
viewModel.score.observe(this, Observer { newScore ->
scoreText.text = newScore.toString()
})
+ dataBinding과 함께 사용
*Activity.class
binding.lifecycleowner = this (activity일때)
binding.lifecycleowner = viewLifeCyleOwner (Fragment일때)
(추가_20.06.15)
1. Room과 함께 쓰일 수 있다.
룸은 observable query를 지원합니다. 즉, query의 반환값으로 LiveData를 사용할 수 있는 것 있다.
그 결과 해당 쿼리 부분의 data가 바뀌면 이를 observing하고 있는 곳에 notify해준다.
val query : LiveData<Item> = roomDao.getItem()
2. TransFormation LiveData
*Transformation.map()
val userLiveData: LiveData<User> = UserLiveData()
val userName: LiveData<String> = Transformations.map(userLiveData) {
user -> "${user.name} ${user.lastName}"
}
Transformation.map()을 활용하면 LiveData 원하는 형태로 변환 가능하다.
3. ObservableField의 notifychanged()
LiveData가 없었을때 ObervableField를 LiveData와 비슷한 용도로 사용할 수 있었다.
ObservableField는 notifyChanged()라는 메서드를 가지고 있어. 구독자들에게 신호를 줄 수 있었는데
liveData는 이 기능이 없다. 신호를 주기 위해서는 새로운 데이터를 set하는 수밖에 없다.
4. private로 livedata 캡슐화
*ViewModel.kt
private val _score MutableLiveData<Int>()
val score : LiveData<Int>() = _score
_score : 클래스 내부에서 사용할 데이터
score : 클래스 위부에서 받아 쓸 데이터 (Mutable이 아닌 LiveData이기 때문에 set이 안 됨.)
*참고
developer.android.com/topic/libraries/architecture/livedata
'모던 안드로이드 > Udacity Android with kotlin' 카테고리의 다른 글
[Udacity android with kotlin] 5. Architecture - viewmodel (0) | 2020.06.15 |
---|---|
[advanced android] android에서 Test란? TDD란? #Test와 AAC (1) | 2020.04.21 |
Retrofit+liveData+moshi 로 네트워크 통신하기 (0) | 2020.04.19 |
(ViewModel+LiveData)Bottom Navigation 수직/수평 전환시 fragment 초기화 문제 해결 #configuration change (0) | 2020.04.16 |
(AAC 응용) LiveData+Room+RecyclerView #DiffUtil (0) | 2020.04.15 |