Kotlin 에서 예외 처리
Kotlin에서 예외 처리 문법 자체는 동일하다.
다른 점은 try-catch-finally 자체가 expression이라는 것이다.
따라서, 다음과 같이 사용이 가능하다.
val result = try {
// 코드
} catch (e: Exception) {
// 예외 처리 및 기본값 반환
null
}
Checked/Unchecked Exception
Kotlin에서는 자바와 다르게 Checked/Unchecked Exception의 차이가 없이 Unchecked Exception만 사용한다.
컴파일러가 예외 처리를 강제하지 않기 때문에 예외 처리를 간소화할 수 있다는 장점이 있지만, 예상하지 못한 Exception이 발생할 수 있다는 문제가 발생할 수 있다.
Try-With-Resources
Try-With-Resources는 Java에서 자동적으로 close()를 해주기 때문에 메모리 누수를 방지하기 위해 사용한다.
Kotlin에서는 .use를 통해 try-with-resources를 사용 가능하다.
.use는 람다 함수를 사용하고 더욱 간결하게 표현 가능하다.
val file = File("example.txt")
file.inputStream().use { inputStream ->
val content = inputStream.readBytes().toString(Charsets.UTF_8)
println(content)
} // 블록이 끝나면 자동으로 inputStream.close()가 호출됨
.use 함수를 좀 더 자세히 보면
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
var exception: Throwable? = null
try {
return block(this)
} catch (e: Throwable) {
exception = e
throw e
} finally {
when {
apiVersionIsAtLeast(1, 1, 0) -> this.closeFinally(exception)
this == null -> {}
exception == null -> close()
else ->
try {
close()
} catch (closeException: Throwable) {
// cause.addSuppressed(closeException) // ignored here
}
}
}
}
- use 함수는 인라인 함수이다.
- 컴파일러에게 정확히 한 번만 호출됨을 알려주고 있다.
- api version 이 1.1.0 이상이면 close를 closeFinally 함수를 호출하고 있고 이하의 경우 직접 구현하고 있다.
요약
- Kotlin에서는 try-catch-finally는 Expression이다.
- Kotlin에서는 Unchecked Exception만 존재한다.
- Kotlin에서 try-with-resources는 .use 인라인 함수로 사용가능하다.
출처:
https://www.inflearn.com/course/java-to-kotlin/dashboard
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의 | 최태현 - 인프런
최태현 | 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., 요즘 대세인 코틀린을 공부하고 싶다면?⭐ J
www.inflearn.com
'Kotlin > Basic' 카테고리의 다른 글
Kotlin은 Java와 무엇이 다른가? (8) - 클래스 (0) | 2024.09.19 |
---|---|
Kotlin은 Java와 무엇이 다른가? (7) - 함수 (0) | 2024.09.19 |
Kotlin은 Java와 무엇이 다른가? (5) - 반복문 (1) | 2024.09.16 |
Kotlin은 Java와 무엇이 다른가? (4) - 제어문 (1) | 2024.09.16 |
Kotlin은 Java와 무엇이 다른가? (4) - 연산자 (1) | 2024.09.13 |