개발일기

CoroutineScope와 LifecycleScope 차이

뱅우 2025. 8. 21. 09:54
반응형
CoroutineScope와 LifecycleScope 차이

CoroutineScope와 LifecycleScope 차이

Kotlin Coroutine을 안드로이드에서 활용할 때, 자주 접하는 개념이 CoroutineScopeLifecycleScope입니다. 둘 다 코루틴의 실행 범위를 정의하는 역할을 하지만, 사용 목적과 관리 방식에서 중요한 차이가 있습니다.

1. CoroutineScope란?

CoroutineScope는 코루틴 실행의 기본 단위가 되는 스코프입니다. Scope가 살아있는 동안 코루틴이 유지되며, 스코프가 취소되면 해당 스코프에서 실행된 모든 코루틴이 함께 취소됩니다.

class MyRepository {
    private val scope = CoroutineScope(Dispatchers.IO)

    fun fetchData() {
        scope.launch {
            // 네트워크 요청 처리
        }
    }
}
  • 범용적으로 사용할 수 있다.
  • 수명 주기와 무관하다.
  • 개발자가 직접 취소 관리(cancel)를 해줘야 한다.

2. LifecycleScope란?

LifecycleScope는 안드로이드 컴포넌트(Activity, Fragment 등)에 특화된 CoroutineScope입니다. 해당 컴포넌트의 수명 주기에 따라 자동으로 코루틴을 취소해줍니다.

class MyActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        lifecycleScope.launch {
            // UI 관련 데이터 처리
        }
    }
}
  • LifecycleOwner(Activity, Fragment)에 종속적이다.
  • onDestroy 시점에 자동으로 코루틴이 취소된다.
  • UI와 연계된 비동기 작업에 적합하다.

3. 차이점 비교

구분 CoroutineScope LifecycleScope
용도 범용 코루틴 실행 안드로이드 UI 컴포넌트 전용
수명 주기 관리 개발자가 직접 취소해야 함 Lifecycle에 맞춰 자동 관리
대표적인 활용 Repository, UseCase Activity, Fragment

4. 언제 무엇을 써야 할까?

  • CoroutineScope → 앱 전역, Repository, UseCase 등 UI와 무관한 비동기 처리
  • LifecycleScope → Activity/Fragment 내부, UI 갱신과 직접 연결된 비동기 처리

정리: 안드로이드에서는 LifecycleScope를 활용하면 수명 주기 관리가 자동으로 되기 때문에 UI 코드가 훨씬 안전해집니다. 반대로, 앱 전역이나 비즈니스 로직에서는 CoroutineScope를 활용해 독립적인 코루틴을 실행하는 것이 적합합니다.

반응형