Kotlin 예외 처리 정리

패스트 캠퍼스 실무 프로젝트로 배우는 Kotlin & Spring 강의 정리

예외 처리

  • 자바의 try-with-resources
    • AutoCloseable 인터페이스를 구현하는 클래스는 try 구문에서 선언된 객체의 close 메소드를 호출하게 됨
  • use
    • 내부에서 finally 구문에서 특정 조건에 따라 close 메소드 호출하도록 처리
import java.io.FileWriter

fun main() {
    FileWriter("text.txt")
        .use {
            it.write("Hello Kotlin")
        }
}
  • 기본 예외 처리
fun getStr(): Nothing = throw Exception("Exception")

fun main() {
    val result = try {
        getStr()
    } catch (e: Exception) {
        println(e.message)
        "default"
    }

    println("result = $result")
  	// Exception
  	// result = default
}
  • runCatching 을 이용한 예외 처리
    • 함수형 처리 가능
    • getOrNull(): 성공하면 결과값, 예외 발생하면 null 반환
    • exceptionOrNull() : 성공하면 null, 예외가 발생하면 Throwable 타입의 예외 반환
    • getOrDefault(): 성공하면 결과값, 예외 발생하면 지정한 기본값 반환
    • getOrElse() : 성공하면 결과값 반환, 예외 발생하면 수신자 객체로 Throwable 받을 수 있어 내부 함수의 결과값 반환
    • getOrThrow() : 성공하면 결과값 반환, 예외를 발생시킴
    • map() : 성공할 경우 원하는 값으로 변경 가능하며 결과값은 Result<>. 위의 메서드 중에서 사용해야 결과값 사용 가능
    • mapCatching() : map 내부에서 예외가 발생할 경우, 이후에 getOrDefault 등의 메서드에서 처리 가능
    • recover : 성공할 경우 동작하지 않고 예외 발생할 경우 동작
    • recoverCatching() : 함수 내에서 예외가 발생할 경우, 이후 메서드에서 처리 가능
fun getStr(): Nothing = throw Exception("Exception")

fun main() {
    val result = runCatching { getStr() }
        .getOrElse {
            println(it.message)
            "default"
        }
    println("result = $result")
  	// Exception
  	// result = default
}