개발일기

ViewModelScope의 특징과 활용법

뱅우 2025. 8. 25. 10:01
반응형
ViewModelScope의 특징과 활용법

ViewModelScope의 특징과 활용법

안드로이드 앱 개발에서 코루틴(Coroutine)을 활용할 때, 가장 많이 사용되는 스코프 중 하나가 ViewModelScope입니다. 특히 MVVM 아키텍처에서 ViewModel과 함께 쓰이며, UI 관련 데이터 처리를 안전하게 할 수 있도록 돕습니다.

1. ViewModelScope란?

ViewModelScope는 ViewModel 클래스에 기본적으로 제공되는 CoroutineScope입니다. ViewModel이 메모리에서 해제(onCleared)될 때, 이 Scope에서 실행 중인 모든 코루틴이 자동으로 취소됩니다.

class MyViewModel : ViewModel() {
    fun fetchUserData() {
        viewModelScope.launch {
            val user = repository.getUser()
            // LiveData 또는 StateFlow 업데이트
        }
    }
}
  • ViewModel의 생명주기와 함께 동작
  • onCleared() 호출 시 자동으로 코루틴 취소
  • UI 데이터 로딩, API 호출 등에 최적화

2. 왜 ViewModelScope를 사용해야 할까?

만약 ViewModelScope 없이 단순 CoroutineScope를 사용할 경우, Activity/Fragment가 종료되더라도 코루틴이 계속 실행될 수 있습니다. 이는 메모리 누수(Leak)나 불필요한 리소스 사용으로 이어질 수 있습니다.

ViewModelScope는 이런 문제를 방지하고, ViewModel의 역할인 데이터 관리에 맞춘 코루틴 실행을 보장합니다.

3. 대표적인 활용 예시

(1) 네트워크 데이터 요청

viewModelScope.launch(Dispatchers.IO) {
    val response = apiService.getPosts()
    withContext(Dispatchers.Main) {
        _posts.value = response
    }
}

(2) Room 데이터베이스 연동

viewModelScope.launch {
    val userList = userDao.getAllUsers()
    _users.value = userList
}

(3) Flow 수집

viewModelScope.launch {
    repository.getUserFlow().collect { user ->
        _userState.value = user
    }
}

4. 정리

  • ViewModelScope는 ViewModel에 최적화된 CoroutineScope이다.
  • onCleared() 시점에 자동으로 코루틴 취소 → 메모리 누수 방지
  • 네트워크, DB, Flow 수집 등 UI 데이터 관리에 적극 활용 가능

결론: MVVM 아키텍처에서 ViewModelScope는 사실상 필수적으로 활용되는 기능입니다. UI와 관련된 데이터를 안전하게 처리하고 싶다면, ViewModelScope를 적극적으로 활용하세요.

반응형