LiveData란?

지금별·2024년 2월 3일
post-thumbnail

🤔 1. LiveData란?

Livedata는 다른 클래스와 다르게 수명주기를 인식한다고 합니다.
수명주기를 인식한다는 것은 수명주기가 살아있을 때 데이터를 관찰할 수 있다? 이런 말인 듯합니다.
더 나아가서 Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED 또는 RESUMED 상태이면 LiveData는 관찰자를 활성 상태로 간주한다고 합니다.
그리고 LiveData는 활성 관찰자에게만 업데이트 정보를 알린다고 합니다.

👁‍🗨 우리가 뉴스 기사를 읽는다고 예를 들어보겠습니다.
우리가 뉴스 기사를 클릭하면 Observer의 수명주기가 STARTED 또는 RESUMED이 됩니다.
이때 기사(글) 및 사진 등에 해당하는 LiveData(Observer 패턴에 등록된)가 Observer에게 알려줘서 우리가 기사를 읽고 사진을 볼 수 있게 해준 다는 것입니다.



😀 2. LiveData 장점

1. LiveData는 observer 패턴을 따라서 개발자가 업데이트할 필요가 없습니다.
-> 데이터가 바뀌면 LiveData가 observer에게 알려줘 실시간으로 데이터를 최신화하여 보여줍니다.

2. 메모리 누수가 없습니다.
-> observer가 수명주기에 결합되어 있어서 수명주기가 끝나면 자동으로 같이 삭제되기 때문입니다.

3. 중지된 활동으로 인한 비정상 종료가 없습니다.
-> 수명주기가 비활성 상태(예: activity가 Back Stack에 있을 시)에 있으면 observer는 LiveData의 이벤트를 받지 않습니다.

4. 최신 데이터를 유지합니다.
-> 수명주기가 활성화되면 당연히 LiveData의 알림을 받아 최신 데이터를 유지할 수 있습니다.



💻 3. LiveData 예제

Up 버튼과 Down 버튼을 누르면 값이 증가, 감소되는 것을 LiveData를 통해 보이도록 구현했습니다.



3.1 MainViewModel

private var mutableLiveData = MutableLiveData(0)
    val liveData : LiveData<Int>
        get() = mutableLiveData


    fun up()
    {
        mutableLiveData.value = mutableLiveData.value!!.plus(1)
    }

    fun down()
    {
        mutableLiveData.value = mutableLiveData.value!!.minus(1)
    }

mutableLiveData로 변수를 선언하고 초깃값을 0으로 설정하였습니다.
mutableLiveData로 값을 받아 LiveData로 넘기는데 mutableLiveData로 변수를 설정한 이유는 viewModel에서 데이터를 변경 및 저장하는 데 있어서 변경 가능한 일반 클래스이기 때문입니다.
UI 상에서 데이터는 변경되지 않아야 하며 오로지 관찰만 되도록 하기 위해 mutableLiveData 값을 LiveData로 넘겨받습니다.




3.2 MainActivity

		upBtn.setOnClickListener {
            viewModel.up()
        }

        downBtn.setOnClickListener {
            viewModel.down()
        }

        viewModel.liveData.observe(this) {
            numText.text = it.toString()
        }

up 버튼과 down 버튼을 클릭하면 값이 증가 및 감소 되도록 합니다
변경 된 값 LiveDataobserver에게 알려 observer가 변경 된 값을 UI로 보여줍니다.



😊 마치며

LiveData가 어떻게 사용되는지와 장점에 대해 알아보았습니다.
다음 글에서는 flow에 대해 알아보겠습니다.



참고자료

LiveData 공식문서
LiveData GitHub

0개의 댓글