PHpullh
학습 라이브러리/Kotlin/코루틴 스코프 (CoroutineScope)

KOTLIN · 비동기

코루틴 스코프 (CoroutineScope)

컴포넌트의 생명주기에 맞는 코루틴 스코프를 생성하여 리소스 누수를 방지합니다.

비동기중급coroutine-scopesupervisorJoblifecycledispatchers

핵심 설명

컴포넌트의 생명주기에 맞는 코루틴 스코프를 생성하여 리소스 누수를 방지합니다.

Kotlin code

import kotlinx.coroutines.*

class NetworkService : CoroutineScope {
    private val job = SupervisorJob()
    override val coroutineContext = Dispatchers.IO + job

    fun fetchData(url: String) = launch {
        println("[${Thread.currentThread().name}] 요청: $url")
        delay(500)
        println("응답 완료: $url")
    }

    fun destroy() {
        println("서비스 종료 중...")
        job.cancel()
    }
}

class ViewModelScope {
    private val scope = CoroutineScope(
        SupervisorJob() + Dispatchers.Main.immediate
    )

    fun loadData() {
        scope.launch {
            try {
                val data = withContext(Dispatchers.IO) {
                    delay(300)
                    "로드된 데이터"
                }
                println("UI 업데이트: $data")
            } catch (e: CancellationException) {
                println("취소됨")
            }
        }
    }

    fun clear() = scope.cancel()
}

fun main() = runBlocking {
    val service = NetworkService()
    service.fetchData("/api/users")
    service.fetchData("/api/orders")
    delay(600)
    service.destroy()
}

학습 팁

SupervisorJob을 사용하면 자식 코루틴의 실패가 다른 자식에게 전파되지 않아 독립적인 작업에 적합합니다.

주의할 점

스코프를 취소하지 않으면 코루틴이 계속 실행되어 메모리 누수가 발생합니다. onDestroyonCleared에서 반드시 취소하세요.

자주 묻는 질문

코루틴 스코프 (CoroutineScope)란 무엇인가요?

컴포넌트의 생명주기에 맞는 코루틴 스코프를 생성하여 리소스 누수를 방지합니다.

코루틴 스코프 (CoroutineScope) 학습 시 주의할 점은 무엇인가요?

스코프를 취소하지 않으면 코루틴이 계속 실행되어 메모리 누수가 발생합니다. onDestroy 나 onCleared 에서 반드시 취소하세요.