LiveData의 관찰자(Observer)는 어떻게 구현하나요?
_____A: LiveData의 관찰자(Observer)를 구현하는 기본 방법은 Android의 `Observer
---
1. Observer 인터페이스의 기본 구현
- LiveData는 데이터의 변화를 감시하는 `Observer
- `Observer
```kotlin
val observer = Observer
// 데이터 변경 시 UI 업데이트 코드 작성
textView.text = newData
}
```
---
2. LiveData 관찰 등록하기
- Activity 또는 Fragment에서 `LiveData.observe()` 메서드를 통해 `Observer`를 등록합니다.
- 첫 번째 인자는 `LifecycleOwner`, 보통 현재 Activity나 Fragment를 넣어 라이프사이클에 맞춰 자동 관리되도록 합니다.
```kotlin
viewModel.liveData.observe(this, observer)
```
- 또는 람다식으로 바로 구현할 수도 있습니다.
```kotlin
viewModel.liveData.observe(this) { newData ->
textView.text = newData
}
```
---
3. LifeCycleOwner 의미
- `LifecycleOwner`를 통해 LiveData는 화면이 활성 상태 (예: onStart~onStop 사이)일 때만 Observer에 알림을 전달합니다.
- Activity의 경우 `this` 또는 `this@ActivityName`를, Fragment는 `viewLifecycleOwner`를 넘겨주는 것이 권장됩니다.
```kotlin
// Fragment 예시
textView.text = newData
}
```
---
4. 예제: ViewModel과 LiveData, Observer 함께 사용하기
```kotlin
class MyViewModel : ViewModel() {
private val _textData = MutableLiveData
val textData: LiveData
fun updateData(newText: String) {
_textData.value = newText
}
}
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.textData.observe(viewLifecycleOwner) { text ->
textView.text = text
}
button.setOnClickListener {
viewModel.updateData("새로운 텍스트")
}
}
}
```
---
5. 관찰자 구현 시 주의사항
- UI 업데이트 코드는 `onChanged()`에서만 하여 직접 LiveData에 데이터 쓰기는 반드시 ViewModel에서 수행.
- 여러 관찰자가 등록될 수 있어, 데이터가 변할 때마다 모두 알림 받음.
- LifecycleOwner와 함께 사용하여 메모리 누수 및 불필요한 UI 업데이트 방지.
---
요약하자면, LiveData의 관찰자(Observer)는 `Observer
LiveData는 안드로이드 아키텍처 컴포넌트 중 하나로, UI에서 데이터를 관찰하고 변경 사항이 있을 때 자동으로 UI를 업데이트해주는 역할을 합니다.
LiveData를 사용하면 데이터의 생명주기(lifecycle)를 안전하게 관리할 수 있기 때문에 메모리 누수나 크래시를 줄이는 데 매우 유용합니다.
1. 기본 개념 - LiveData 는 데이터 홀더 클래스입니다.
- Observer 는 LiveData의 데이터 변화를 감지하고 반응하는 역할을 합니다.
- 관찰자는 "관찰 대상(LiveData)"에 등록되며, LiveData의 데이터가 변경될 때 콜백 메서드가 호출됩니다.
- 관찰자는 LifecycleOwner(예: Activity, Fragment)와 함께 등록되어 해당 라이프사이클 상태에 따라 자동으로 활성화 및 비활성화 됩니다.
2. Observer 인터페이스 구현하기 Observer는 `androidx.lifecycle.Observer
여기서 `T`는 LiveData가 감싸고 있는 데이터의 타입입니다.
일반적으로 다음과 같이 간단히 구현합니다: ```java Observer
3. Observer 등록하기 관찰자는 LiveData 인스턴스에 `observe()` 메서드를 통해 등록합니다.
```java liveData.observe(lifecycleOwner, observer); ``` - `lifecycleOwner`는 주로 `this` (Activity 또는 Fragment)로 넘기며, 이 객체의 라이프사이클에 따라 관찰자의 활성화/비활성화가 자동으로 관리됩니다.
- 이때 LiveData가 관리하는 데이터가 갱신되면 `observer`의 `onChanged()`가 호출됩니다.
예시 (Java): ```java liveData.observe(this, new Observer
4. Observer 동작 원리 - LiveData는 내부적으로 등록된 모든 Observer 리스트를 관리합니다.
- LifecycleOwner의 상태가 STARTED 이상일 경우에만 Observer에게 알림을 전달합니다.
- LifecycleOwner가 DESTROYED 상태가 되면 자동으로 해당 Observer가 해제되어 메모리 누수를 방지합니다.
5. 직접 Observer 클래스를 만들어 사용하기 특별한 경우에는 아래처럼 별도로 Observer 클래스를 작성할 수도 있습니다.
```java public class MyObserver implements Observer
- LiveData의 `observe(LifecycleOwner, Observer)` 메서드를 통해 관찰자를 등록합니다.
- 관찰자는 LifecycleOwner의 상태에 따라 활성화/비활성화가 자동으로 처리되어 안전하게 UI에 데이터를 바인딩할 수 있습니다.
- Kotlin에서는 람다식과 함께 보다 간결하게 Observer를 구현할 수 있습니다.
이렇게 구현된 Observer는 LiveData의 변화를 감지해 UI를 동적으로 업데이트하는 역할을 하며, 안드로이드의 MVVM 패턴에서 View와 ViewModel 간 데이터 전달을 쉽게 해줍니다.
작성자:
김서준 [비회원]
| 작성일자: 1년 전
2025-05-25 12:40:38
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 153 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.