2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

LiveData의 관찰자(Observer)는 어떻게 구현하나요?

_____
Q: LiveData의 관찰자(Observer)는 어떻게 구현하나요?

A: LiveData의 관찰자(Observer)를 구현하는 기본 방법은 Android의 `Observer` 인터페이스를 사용하여 UI 컴포넌트(예: Activity, Fragment)에서 데이터를 감지하는 것입니다. 다음은 자세한 설명과 예제입니다.

---

1. Observer 인터페이스의 기본 구현

- LiveData는 데이터의 변화를 감시하는 `Observer` 인터페이스를 제공합니다.
- `Observer`는 `onChanged(T data)` 메서드를 오버라이드해서 데이터 변경 시 실행할 코드를 작성합니다.

```kotlin
val observer = Observer { newData ->
// 데이터 변경 시 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 예시
viewModel.liveData.observe(viewLifecycleOwner) { newData ->
textView.text = newData
}
```

---

4. 예제: ViewModel과 LiveData, Observer 함께 사용하기

```kotlin
class MyViewModel : ViewModel() {
private val _textData = MutableLiveData()
val textData: LiveData get() = _textData

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.observe(LifecycleOwner, Observer)`를 통해 등록해 데이터 변경 알림을 받아 UI를 업데이트합니다. Activity나 Fragment의 생명주기와 연동하여 안전하고 편리하게 동작할 수 있습니다.
LiveData의 관찰자(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 observer = new Observer() { @Override public void onChanged(String data) { // LiveData의 데이터가 변경될 때 호출됨 // UI 업데이트 등 필요한 작업을 수행 textView.setText(data); } }; ``` 코틀린을 사용할 경우 람다 구문으로 간단하게 작성할 수 있습니다: ```kotlin val observer = Observer { data -> // data가 변경되었을 때 실행 textView.text = data } ```

3. Observer 등록하기 관찰자는 LiveData 인스턴스에 `observe()` 메서드를 통해 등록합니다.

```java liveData.observe(lifecycleOwner, observer); ``` - `lifecycleOwner`는 주로 `this` (Activity 또는 Fragment)로 넘기며, 이 객체의 라이프사이클에 따라 관찰자의 활성화/비활성화가 자동으로 관리됩니다.

- 이때 LiveData가 관리하는 데이터가 갱신되면 `observer`의 `onChanged()`가 호출됩니다.

예시 (Java): ```java liveData.observe(this, new Observer() { @Override public void onChanged(String data) { textView.setText(data); } }); ``` 예시 (Kotlin): ```kotlin liveData.observe(viewLifecycleOwner, Observer { data -> textView.text = data }) ``` Fragment에서는 보통 `viewLifecycleOwner`를 사용해 관찰자를 등록합니다.



4. Observer 동작 원리 - LiveData는 내부적으로 등록된 모든 Observer 리스트를 관리합니다.

- LifecycleOwner의 상태가 STARTED 이상일 경우에만 Observer에게 알림을 전달합니다.

- LifecycleOwner가 DESTROYED 상태가 되면 자동으로 해당 Observer가 해제되어 메모리 누수를 방지합니다.



5. 직접 Observer 클래스를 만들어 사용하기 특별한 경우에는 아래처럼 별도로 Observer 클래스를 작성할 수도 있습니다.

```java public class MyObserver implements Observer { private TextView textView; public MyObserver(TextView tv) { this.textView = tv; } @Override public void onChanged(String data) { textView.setText(data); } } ``` 그리고 등록 시: ```java MyObserver observer = new MyObserver(textView); liveData.observe(this, observer); ``` --- 요약 - Observer는 `androidx.lifecycle.Observer` 인터페이스를 구현하는 동시에 `onChanged(T data)` 메서드를 오버라이드 합니다.

- 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
내용이 부정확하다면 싫어요를 클릭해주세요.