반응형
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를 적극적으로 활용하세요.
반응형
'개발일기' 카테고리의 다른 글
| Kotlin Multiplatform (KMP) 소개와 활용 사례 (6) | 2025.08.27 |
|---|---|
| Kotlin DSL과 Gradle 스크립트 활용법 (3) | 2025.08.26 |
| CoroutineScope와 LifecycleScope 차이 (6) | 2025.08.21 |
| Kotlin Flow와 LiveData 비교 (6) | 2025.08.20 |
| StateFlow vs SharedFlow 차이와 활용법 (5) | 2025.08.19 |