코루틴 스코프 종류도 많고 역할도 각기 다르고 헷갈립니다.
쉽게 외우는 방법을 공유합니다.
아래처럼 “L → V → G” 순으로 떠올리면 기억하기 쉽습니다.
- L: lifecycleScope
- 소유자: Activity/Fragment
- 용도: UI 관련 작업 → UI가 살아 있는 동안만 실행
- 기억법: Lifecycle → Life(생명)
- V: viewModelScope
- 소유자: ViewModel
- 용도: 비즈니스 로직(네트워크·DB) → ViewModel이 살아 있는 동안 실행
- 기억법: ViewModel → View(화면 뒤 로직)
- G: GlobalScope
- 소유자: 앱 전체(Application)
- 용도: 전역 작업(앱 프로세스 전체) → 수동 취소 필요
- 기억법: Global(전역)
Scope 소유자 용도 기억 포인트
| lifecycleScope | Activity/Fragment | UI 업데이트, 짧은 생명 주기 작업 | Life → UI 생명 주기 |
| viewModelScope | ViewModel | 네트워크·DB 호출 등 비즈니스 로직 | View → 화면 뒤 로직 |
| GlobalScope | Application | 앱 전체 장기 작업 | Global → 전역 |
| CoroutineScope(IO) | 직접 생성 | 파일 I/O, CPU 집약적 작업 | IO → 입출력 집중 |
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// UI 관련 → lifecycleScope
lifecycleScope.launch {
// UI 업데이트용 지연 작업 등
}
}
}
class MainViewModel : ViewModel() {
fun loadData() {
// 네트워크/API 호출 → viewModelScope
viewModelScope.launch {
val result = repository.fetchSomething()
_uiState.postValue(result)
}
}
}
// 앱 전체 전역 작업 예시
fun scheduleBackgroundJob() {
GlobalScope.launch {
// 수동으로 취소 관리 필요
}
}
// Dispatcher 전용 스코프 예시
val ioScope = CoroutineScope(Dispatchers.IO)
fun readFile() {
ioScope.launch {
// 파일 I/O 집중 작업
}
}
*UI(Activity/Fragment) 내부
ㄴ lifecycleScope
* ViewModel 내부
ㄴviewModelScope
* 앱 전체에서 살아 있어야 한다
ㄴGlobalScope
* 특정 Dispatcher만 필요하다
ㄴCoroutineScope(Dispatchers.IO/Default)
'안드로이드 개발 > 개발팁' 카테고리의 다른 글
| AGP와 Gradle 버전 맞추기 (2) | 2025.08.04 |
|---|---|
| 반드시 CoroutineScope를 직접 써야 하는 예시 (공식문서 기반) (0) | 2025.07.17 |
| 커스텀 스피너의 dropdown 창 닫기 (0) | 2025.06.09 |
| 내 앱의 특정 서비스가 foreground로 실행 중인지 추가 확인 (1) | 2025.05.28 |
| 안드로이드스튜디오에 알맞는 JDK는 단연17 (2) | 2025.05.21 |