Exception Handling Using try-catch Clause in Coroutines

2025. 5. 6. 17:30·Study/Kotlin
728x90
반응형

이번 글은 코루틴에서 try-catch절을 사용해 예외 처리를 해보는 시간이 될 것이다.

 

일반적인 예외 처리 상기하기

fun main() {
	generateException()
}

fun generateException() {
	throw RuntimeException()
}

이런 예외를 try-catch절로 처리한 상황과 그렇지 않은 상황을 떠올려보자.

 

먼저 예외 처리를 해두었다면 프로그램이 정상적으로 실행이 종료된다.

 

그렇지 않은 경우 로그를 남기며 프로그램에 크래시가 발생한다.

 

코루틴에 적용해보기

fun main() {
	val scope = CoroutineScope(Job())
    scope.launch {
    	generateException()
    }
    
    Thread.sleep(100)
}

fun generateException() {
	throw RuntimeException()
}

당연히 위 코드는 어디선가 예외를 처리하지 않기에 크래시가 발생한다.

 

launch내부에서 예외를 처리하면 어떨까?

fun main() {
	val scope = CoroutineScope(Job())
    scope.launch {
    	try {
        	generateException()
    	} catch(e: Exception) {
        	println("Caught exception: $e")
        }
    }
    
    Thread.sleep(100)
}

fun generateException() {
	throw RuntimeException()
}

이렇게 예외를 처리했을 때는 문제없이 실행할 수 있다.

 

한 발자국 더 가보기

이번에는 try-catch절 내부에서 다시 launch를 통해 새 코루틴을 시작하고 내부에서 예외를 발생시킨다.

(한국어보다 코드로 보는 것이 이해가 빠를 것 같기도 하다.)

 

fun main() {
	val scope = CoroutineScope(Job())
    scope.launch {
    	try {
        	launch {
            	generateException()
            }
    	} catch(e: Exception) {
        	println("Caught exception: $e")
        }
    }
    
    Thread.sleep(100)
}

fun generateException() {
	throw RuntimeException()
}

이 경우는 예외를 처리할 수 있을까?

 

코루틴 간 에러 전파에 대해 알고 있는 사람이라면 눈치챘을 것이라 생각한다.

 

답은 '처리할 수 없다'이다.

자식 코루틴에서 에러가 발생했고 이는 처리(handling)되지 않았기에 부모 코루틴에게 전파된다.

 

그리고 현재 부모 코루틴은 일반 Job객체를 사용 중이므로 예외와 함께 종료된다.

 

정리하기

코루틴에서 try-catch절을 사용한 예외 처리는 유효하다.

 

하지만, structured concurrency 개념도 유의하여 처리해야 한다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Study > Kotlin' 카테고리의 다른 글

Exception Handling Using ExceptionHandler in Coroutines  (0) 2025.05.30
NonCancellable Coroutines 사용해보기  (0) 2025.04.07
Coroutines Cooperative Cancellation  (0) 2025.04.06
LifecycleScope 간단히 알아보기  (0) 2025.02.26
ViewModelScope 알아보기  (1) 2025.02.25
'Study/Kotlin' 카테고리의 다른 글
  • Exception Handling Using ExceptionHandler in Coroutines
  • NonCancellable Coroutines 사용해보기
  • Coroutines Cooperative Cancellation
  • LifecycleScope 간단히 알아보기
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (238) N
      • Dev experience (86) N
        • Android (85) N
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    SWIFT
    CodeLab
    프로그래머스
    Observer
    코틀린
    coroutines
    오블완
    room
    databinding
    코루틴
    getNumericValue
    LiveData
    android
    ViewModel
    aac
    programmers
    jetpack
    daterangepicker
    배열
    Material
    티스토리챌린지
    viewModelScope
    안드로이드
    ios
    Kotlin
    Java
    MVVM
    스위프트
    PCCE
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Exception Handling Using try-catch Clause in Coroutines
상단으로

티스토리툴바