728x90

- Error : 시스템에 비정상적인 상황이 발생한 경우. 예측이 어렵고 기본적으로 복구가 불가능하다.
- ex) OutOfMemoryError, StackOverFlowError
- Exception : 시스템에서 포착 가능하여(try-catch) 복구 가능한 에러. 예외 처리 강제
- ex) IOException, FileNotFoundException
- @Transcactional에서 해당 예외가 발생한다면 기본적으로 롤백이 동작하지 않는다(rollbackFor를 사용해야 한다)
- RuntimeException : 런타임 시 발생하는 예외, 예외 처리를 강제하지 않는다.
- ex) NullPointerException, ArrayIndexOutOfBoundsException
- 코틀린에서는 자바의 Exception 계층을 코틀린 패키지로 래핑 한다.
fun main() {
//Thread.sleep(1000); //컴파일 오류 안난다
try {
//Thread.sleep(1000)
throw Exception()
} catch (e: Exception) { //직접 예외 처리를 할 수도 있다.
println("에러 발생!")
} finally {
println("finally 실행!") //JAVA와 마찬가지로 finally를 동작시킬 수 있다
}
//코틀린에서는 try-catch 가 표현식이다.
val a = try {
"1234".toInt()
} catch (e: Exception) {
//예외가 발생하면, Unit을 반환한다.
println("예외 발생 !")
}
println(a)
//throw Exception("예외 발생!") //코틀린에서 예외를 발생하기 위해서는 throw 키워드를 사용하면 된다.
//failFast("예외 발생!!")
//println("이 메시지는 출력 될까?") //컴파일러가 해당 문장은 실행되지 않는다는 경고를 보여주게 된다. //Nothing 타입을 보고 판단.
val b: String? = null
val c = b ?: failFast("a is null") //엘비스 연산자와 Nothing 타입을 같이 사용하는 경우 반드시 c는 null이 아님이 보장된다
println(c.length)
}
fun failFast(message: String): Nothing { //코틀린에서 throw를 반환하게 되면 Noting을 반환하게 된다.
throw IllegalArgumentException(message)
}
- 자바에서는 checkedException은 컴파일 오류가 발생하므로 무조건 try-catch로 감싸거나, throws로 예외 전파를 해야 한다.
- 코틀린에서는 checkedException을 강제하지 않는다 -> 컴파일 오류가 발생하지 않는다.
- 원하는 경우 try-catch로 감쌀 수 있다.
- 코틀린에서의 try-catch는 표현식이다(반환 값이 있다)
- finally를 사용하면 마지막에 수행될 코드를 작성할 수 있다.
- 코틀린에서 예외를 발생시키기 위해서는 throw를 사용하면 된다(자바랑 같다)
- throw 역시 표현식이기 때문에 리턴할 수 있다(Nothing 타입으로 반환)
- Nothing 타입을 사용하면 컴파일러가 해당 코드 이후는 코드가 실행되지 않는다는 경고를 보여준다
- 엘비스 연산자와 사용하면 null 안전 코드를 작성하지 않아도 된다.
728x90