APP 프로젝트/Toy project

4. Android LiveData 사용하여 데이터 처리하기

young313 2022. 9. 19. 16:20

 LiveData는 관찰 가능한 데이터 홀더 클래스로 수명주기를 고려하여 데이터를 처리할 수 있는 클래스이다. 이번 프로젝트에서 MVVM 패턴을 제대로 구현하기 위해 처음 사용해보았다. 구체적으로 회원가입의 과정에서 db에 회원가입 정보를 post 하고 원하는 정보를 get 하는 과정에서 사용하였다. view에서 직접 model에 접근하지 않고 viewModel 안에 정의한 LiveData를 사용한 것이다. 


 

안드로이드 공식 문서에 따르면 대표적으로 다음과 같은 이점이 있다.

 

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

 

2. 메모리 누수 없음

 

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

 

4. 수명주기를 더 이상 수동으로 처리하지 않음

 

5. 최신 데이터 유지

 

6. 적절한 구성 변경

 

7. 리소스 공유


 

본격적으로 코드와 함께 살펴보면

 

//LiveData 정의
private val _repositoriesGetAccessToken = MutableLiveData<RetrofitGetResponseAllInfo>()
	//무결성을 위해 private, public 나누어서 사용
    val repositories1 : MutableLiveData<RetrofitGetResponseAllInfo>
            get() = _repositoriesGetAccessToken

    fun getAccessToken(token : String){
        viewModelScope.launch {
            repository.getAccessToken(token).let { response ->
                if(response.isSuccessful){ 
                // postValue 를 통해 값 추가
                    _repositoriesGetAccessToken.postValue(response.body())
                    
                }
            }
        }

 

viewModel 파일 안에 다음과 같이 LiveData를 정의했다. token 값을 이용해 user 의 정보를 불러오고 불러온 정보를 LiveData를 통해 처리하는 것이다. 이렇게 정의하고 난 후, 실제로 업데이트 값을 읽을 때는 다음과 같이 관찰이 가능하다. 

 

// observe를 호출
viewModel.loginRepositories1.observe(requireActivity()){
                        Log.d(ContentValues.TAG, "setPostToken: ${it}")}

 

변경사항을 감지하여 관찰하는 observe( )를 호출하여 UI를 업데이트 하거나 값을 받아올 수 있다. 

 

 

이런 식으로 LiveData를 사용하여 DB에서 오는 response를 안전하게 처리하고 최신 데이터로 받아서 처리했다. LiveData의 일부 기능만 (정말 기본 중의 기본만) 사용한 것 같은 느낌이라 아쉬워서 더 공부하고 적절한 곳에 사용해보려 한다.