코틀린은 자바의 try-catch-resources 구문을 제공하지 않지만 use라는 확장 함수를 제공합니다.
FileWriter("test.txt").use {
it.write("Hello Kotlin")
}
코틀린은 try-catch를 통한 예외처리 이외에도 함수형 스타일의 Result 패턴을 구현한 runCatching 을 제공합니다.
Result 패턴이란 함수가 성공하면 캡슐화된 결과를 반환하거나 예외가 발생하면 지정한 작업을 수행하는 패턴입니다.
fun getStr(): Nothing = throw Exception("예외 발생 기본 값으로 초기화")
fun main() {
val result = try {
getStr()
} catch (e: Exception) {
println(e.message)
"기본값"
}
println(result)
// 예외 발생 기본 값으로 초기화
// 기본값
}
val result2 = runCatching { getStr() }
.getOrElse {
println(it.message)
"기본값"
}
println(result2)
// 예외 발생 기본 값으로 초기화
// 기본값
val result3 = runCatching { getStr() }
.getOrNull()
println(result3)
// null반환
val result3: Throwable? = runCatching { getStr() }
.exceptionOrNull()
result3?.let {
println(it.message)
throw it
}
val result3 = runCatching { getStr() }
.getOrDefault("기본 값")
println(result3)
// 기본 값
val result3 = runCatching { getStr() }
.getOrElse {
println(it.message)
"기본 값"
}
println(result3)
// 예외 발생 기본 값으로 초기화
// 기본 값
val result3 = runCatching { getStr() }
.getOrThrow()
// Exception in thread "main" java.lang.Exception: 예외 발생 기본 값으로 초기화
map : 성공인 경우 원하는 값으로 변경
val result3 = runCatching { "안녕" }
.map {
it + "하세요"
}.getOrThrow()
println(result3)
// 안녕하세요
val result3 = runCatching { "안녕" }
.map {
getStr()
}.getOrDefault("기본값")
println(result3)
// Exception in thread "main" java.lang.Exception: 예외 발생 기본 값으로 초기화
val result3 = runCatching { "안녕" }
.mapCatching {
getStr()
}.getOrDefault("기본값")
println(result3)
// 기본값
val result3 = runCatching { "정상" } // 성공시
.recover {
"복구"
}.getOrNull()
println(result3)
// 정상
val result3 = runCatching { getStr() } // 실패시
.recover {
"복구"
}.getOrNull()
println(result3)
// 복구
val result3 = runCatching { getStr() }
.recover {
getStr()
}.getOrDefault("복구")
println(result3)
// Exception in thread "main" java.lang.Exception: 예외 발생 기본 값으로 초기화
val result3 = runCatching { getStr() }
.recoverCatching {
getStr()
}.getOrDefault("복구")
println(result3)
// 복구
출처 : fastcampus
좋은 글 감사합니다~