-
[Kotlin] Result란?Kotlin/Kotlin 2022. 12. 4. 00:01728x90
코틀린의 runCatching
코틀린에서는 runCatching을 통하여 에러 핸들링을 할 수 있습니다.
API를 호출하는 코드에서 API의 응답 에러에 따른 비즈니스 로직을 다르게 가져가고 싶을 수 있습니다.
어떤 경우에는 에러를 캐치해서 다른 메시지를 던지고 싶을 수 있으며, 어떤 코드에서는 그 에러를 무시하고 다른 로직을 수행하고 싶을 수 있습니다.
즉, 동작이 성공하든 실패하든 동작의 결과를 캡슐화해서 나중에 처리될 수 있도록 하는 것이 목적입니다.
함수형 방식의 에러 처리도 가능하며 Coroutines에서 에러 처리를 할 때 구글이 권장하는 방식이기도 합니다.
try.. catch 사용 시
try { loginApiClient.login(request) } catch (e: LoginException) { if (e.errorCode == "INVALID_PASSWORD") { return null } else { throw e } }
runCatcahing 사용 시
return runCatching { loginApiClient.login(request) }.onFailure { e -> if (e.errorCode != "INVALID_PASSWORD") throw e }.getOrNull()
kotlin.runCatching
@InlineOnly @SinceKotlin("1.3") public inline fun <R> runCatching(block: () -> R): Result<R> { return try { Result.success(block()) } catch (e: Throwable) { Result.failure(e) } }
try..catch로직을 그대로 사용하지만 Result로 감싸서 반환합니다.
Result 사용 예시
에러를 무시하고 null 반환
val response = runCatching { login() }.getOrNull()
성공/에러 시 각각 특정 동작 수행 후 에러 던지기
val response = runCatching { login() }.onSuccess { logger.info("성공!") }.onFailure { logger.info("실패!") }.getOrThrow()
참고자료
https://toss.tech/article/kotlin-result
https://dev-repository.tistory.com/105
728x90'Kotlin > Kotlin' 카테고리의 다른 글
Kotlin과 Java의 컴파일 순서 (0) 2023.11.11 [Kotlin] 상태패턴으로 배송상태를 변경해보자 (0) 2023.08.29 [Kotlin] 연산자 오버로딩 사용 예시 (0) 2022.11.25 [Kotlin] @JvmStatic이란? (0) 2022.10.28 [Kotlin] Intellij 에서 코틀린 시작하기 (0) 2022.09.09