EnjoyLife

코루틴 스코프 쉽게 외우기 본문

안드로이드 개발/개발팁

코루틴 스코프 쉽게 외우기

Aiden96 2025. 6. 28. 20:01

코루틴 스코프 종류도 많고 역할도 각기 다르고 헷갈립니다.

쉽게 외우는 방법을 공유합니다. 

 

아래처럼 “L → V → G” 순으로 떠올리면 기억하기 쉽습니다.

  1. L: lifecycleScope
    • 소유자: Activity/Fragment
    • 용도: UI 관련 작업 → UI가 살아 있는 동안만 실행
    • 기억법: Lifecycle → Life(생명)
  2. V: viewModelScope
    • 소유자: ViewModel
    • 용도: 비즈니스 로직(네트워크·DB) → ViewModel이 살아 있는 동안 실행
    • 기억법: ViewModel → View(화면 뒤 로직)
  3. 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)