LiveData란?

수뱀 ㅣ 2025. 3. 18. 20:31

LiveData는 Android의 라이프사이클을 인식하는 데이터 홀더 클래스이다. 즉, 액티비티(Fragment, ViewModel 등)가 활성 상태일 때만 데이터를 관찰하고, 비활성화되면 자동으로 정리되어 메모리 누수와 크래시를 방지하는 기능을 제공한다

 

 

라이브데이터 사용법

 

1. build.gradle(Module: app)

dependencies {
    ...
    implementation 'androidx.appcompat:appcompat:1.1.0'
    ...
}

 

 

 

2. 뷰모델

class ExViewModel : ViewModel() {

    // 내부에서만 값을 변경할 수 있도록 MutableLiveData 사용
    private val _text = MutableLiveData<String>()
    
    // 외부에서는 LiveData로 읽기 전용 접근
    val text: LiveData<String> get() = _text

    fun updateText(newText: String) {
        _text.value = newText // 값 변경 가능
    }
    
}

 

 

 

3. 프래그먼트

LiveData 관찰 (observe)

class ExFragment : Fragment() {

    private lateinit var viewModel: ExViewModel

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        viewModel = ViewModelProvider(this).get(ExViewModel::class.java)

       
        viewModel.text.observe(viewLifecycleOwner) { newText ->
            textView.text = newText // LiveData 관찰하여 UI 업데이트
        }

        button.setOnClickListener {
            viewModel.updateText("새로운 값") // 값 변경은 ViewModel을 통해서만 가능
        }
    }
}

 

코드흐름

1. 사용자가 "button"을 클릭하여 뷰모델의 "updateText"메서드 실행

2. 뷰모델에서  "updateText"메서드가 내부에서만 접근가능한 "_text" 값을 업데이트함

3. 커스텀 게터인 "get() = _text" 사용하여 _text 를 외부에 읽기 전용으로 제공함(논private)

4. 프래그먼트의 observe가 LiveData값을 관찰하여 UI에 반영한다

 

 

LiveData를 사용해서 좋은점

 

1. UI와 데이터 상태의 일치 보장

 LiveData는 관찰자 패턴을 따른다 LiveData는 기본 데이터가 변경될 때 Observer 객체에 알린다.

코드를 통합하여 이러한 Observer 객체에 UI를 업데이트할 수 있다. 이렇게 하면 앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하므로 개발자가 업데이트할 필요가 없다.

 

2. 메모리 누수 없음

 관찰자는 Lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제됩니다.

 

3. 중지된 활동으로 인한 비정상 종료 없음

 활동이 백 스택에 있을 때를 비롯하여 관찰자의 수명 주기가 비활성 상태에 있으면 관찰자는 어떤 LiveData 이벤트도 받지 않음

 

4. 최신 데이터 유지

 생명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신합니다. 예를 들어 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다

 

5. 리소스 공유

 LiveData 객체가 시스템 서비스에 한 번 연결되면 LiveData가 필요한 모든 곳에서(모든 Observer가) LiveData 객체를 관찰할 수 있다.

 

6. 적절한 구성 변경

 기존 방식은 기기를 회전하기 전 saveInstanceState를 이용해 기존 데이터를 보관해두었다가 회전 후 데이터를 가져와 다시 복원하는 방식이었으나 LiveData를 사용하면 이런 작업을 하지 않아도 최신 데이터를 즉시 받게 된다.

 

7. 중지된 활동으로 인한 비정상 종료 없음

 Activity나 Fragment가 백 스택에 있을 때 Observer는 비활성 상태가 되며, 이때는 어떤 LiveData 이벤트도 수신받지 않는다.