[kotlin] 안드로이드 뷰모델을 사용한 에러 핸들링

안드로이드 앱을 개발하다보면 네트워크 요청이나 데이터베이스 조작 등으로 인해 발생하는 에러를 적절하게 핸들링하는 것은 매우 중요합니다. 안정적인 앱을 만들기 위해서는 에러 핸들링이 반드시 고려되어야 합니다. 이번 글에서는 안드로이드 앱에서 뷰모델을 사용하여 에러를 핸들링하는 방법에 대해 알아보겠습니다.

뷰모델을 사용한 에러 핸들링

뷰모델은 안드로이드 아키텍처 컴포넌트 중 하나로, 앱의 UI 관련 데이터를 처리하고 관리하는 데 사용됩니다. 뷰모델을 사용하여 네트워크 요청이나 데이터베이스 조작 등에서 발생하는 에러를 핸들링할 수 있습니다.

import androidx.lifecycle.ViewModel
import androidx.lifecycle.MutableLiveData
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class MyViewModel : ViewModel() {
    val errorMessage = MutableLiveData<String>()

    private val exceptionHandler = CoroutineExceptionHandler { _, throwable ->
        errorMessage.value = "Error occurred: ${throwable.message}"
    }

    fun fetchData() {
        CoroutineScope(Dispatchers.IO + exceptionHandler).launch {
            // 네트워크 요청이나 데이터베이스 조작 등의 비동기 작업 수행
        }
    }
}

위 코드에서는 MyViewModel 클래스를 정의하고, fetchData 함수에서 네트워크 요청이나 데이터베이스 조작과 같은 비동기 작업을 수행합니다. 이때 CoroutineScope을 통해 백그라운드 스레드에서 작업을 실행하고, CoroutineExceptionHandler를 사용하여 에러가 발생했을 때 적절한 처리를 할 수 있습니다.

에러 핸들링 UI

에러가 발생했을 때 이를 사용자에게 알리는 것은 매우 중요합니다. 뷰모델에서 발생한 에러를 UI에서 표시하기 위해 다음과 같이 Observer를 사용할 수 있습니다.

class MyFragment : Fragment() {
    
    private val myViewModel: MyViewModel by viewModels()
    
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        myViewModel.errorMessage.observe(viewLifecycleOwner, Observer { errorMessage ->
            // 에러 메시지를 UI에 표시
        })
    }
}

위 코드에서는 MyFragment 클래스에서 myViewModelerrorMessage를 관찰하여 에러 메시지를 UI에 표시하고 있습니다.

결론

안드로이드 뷰모델을 사용하여 에러를 핸들링하는 것은 앱의 안정성을 높이는 데 도움이 됩니다. 뷰모델을 통해 에러를 적절히 처리하고 UI에 표시함으로써 사용자 경험을 향상시킬 수 있습니다.

이상으로 안드로이드 뷰모델을 사용한 에러 핸들링에 대해 알아보았습니다. 감사합니다.

참고 자료