LiveData
는 관찰자 패턴을 사용하여 데이터 변경을 다른 컴포넌트에 알릴 수 있는 데이터 홀더다.
ViewModel
및 데이터 바인딩과 함께 사용하는 것이 일반적이다.
👍 LiveData의 장점
- 수명주기를 인식한다.
LiveData
는 자신을 관찰하는 컴포넌트의 수명주기를 인식한다.
해당 컴포넌트의 수명주기가 활성 상태(STARTED
또는RESUMED
)이면 데이터 업데이트를 알린다.
반대로 비활성 상태이면 업데이트를 수신하지 않고 활성 상태로 전환됐을 때 수신한다. - 메모리 누수가 없다.
LiveData
가 업데이트될 때 실행되는 콜백은 연결된 수명주기가 끝날 때 자동으로 삭제된다.
📦 LiveData 사용해보기
LiveData 객체 생성하기
LiveData
는 추상 클래스이므로 서브클래스인 MutableLiveData
의 생성자를 호출한다.
이 때 타입 파라미터로 보관할 데이터의 타입을 지정한다.
일반적으로 아래처럼 외부에서는 값을 변경하지 못하도록 백킹 프로퍼티를 사용한다.
data class User(
name: String,
age: Int
)
class UserViewModel : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User>
get() = _user
...
}
LiveData의 값 변경하기
MutableLiveData<T>
의 다음 메서드를 호출하여 값을 변경할 수 있다.
setValue(T)
메인 스레드에서 값을 변경한다.postValue(T)
백그라운드 스레드에서 값을 변경한다.
MutableLiveData
클래스에서 위 메서드들은 접근 제한자가 public
이기 때문에 외부에서 자유롭게 값을 변경할 수 있는 반면, LiveData
클래스에서는 protected
이기 때문에 값을 변경할 수 없다.
class UserViewModel : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User>
get() = _user
_user.value = User(
name = "John"
age = 27
)
...
}
LiveData 관찰하기
LiveData
를 관찰하려면 observe(LifecycleOwner, Observer)
메서드를 호출한다.
이 메서드의 파라미터는 다음과 같다.
LifecycleOwner
LiveData
가 인식하는 수명주기를 소유하는 인터페이스다.FragmentActivity
,Fragment
는LifecycleOwner
를 구현하는 클래스다.Observer
LiveData
의 값이 변경되면 호출되는onChanged
콜백을 포함한다.
class UserActivity : AppCompatActivity() {
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val observer = object: Observer<User> { user ->
Toast.makeText(
this,
"이름은 ${user.name}, ${user.age}세입니다.",
Toast.LENGTH_SHORT
).show()
}
viewModel.user.observe(
this,
observer
)
}
...
}
'Android' 카테고리의 다른 글
ViewModel 맛보기 (0) | 2023.02.27 |
---|---|
Retrofit2로 JSON 데이터 요청하기 (0) | 2023.02.21 |
WorkManager (4) : 작업 체이닝 (0) | 2022.12.10 |
WorkManager (3) : 작업 관리하기 (0) | 2022.12.05 |
WorkManager (2) : 작업 상태 (0) | 2022.12.02 |