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을 사용하면 자식 코루틴의 실패가 다른 자식에게 전파되지 않아 독립적인 작업에 적합합니다.
주의할 점
스코프를 취소하지 않으면 코루틴이 계속 실행되어 메모리 누수가 발생합니다. onDestroy나 onCleared에서 반드시 취소하세요.
자주 묻는 질문
코루틴 스코프 (CoroutineScope)란 무엇인가요?
컴포넌트의 생명주기에 맞는 코루틴 스코프를 생성하여 리소스 누수를 방지합니다.
코루틴 스코프 (CoroutineScope) 학습 시 주의할 점은 무엇인가요?
스코프를 취소하지 않으면 코루틴이 계속 실행되어 메모리 누수가 발생합니다. onDestroy 나 onCleared 에서 반드시 취소하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.