[코틀린인액션] 코틀린에서의 예외?

코틀린에서의 예외 처리 특징

  1. 체크 예외 와 언체크 예외 구분이 없다고 함
    • 모든 예외가 언체크 예외로 처리됨..
    • 예외를 명시적으로 선언하거나 잡을 필요가 없다고 한다.
  1. 예외 처리의 방식
    • try 블록에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 예외를 잡아서 처리한다.
    • finally 블록에서 정리 코드 수행

    요 부분은 자바랑 동일하다.

그런데 왜 코틀린에서 언체크 예외의 구분이 없을 수 있는 것일까?

  • 결론은 단순했다.
  • 개발자가 더 명확하고 간결한 코드를 작성하도록 돕는 것이 철학이다

일단 체크 예외의 문제점이 존재한다.

1 .만약 함수가 새로운 예외를 던지는 경우

  • 해당 함수를 호출하는 모든 메서드가 예외를 처리해야하는 막대한 짐을 등에 얹게 된다.
  1. 과도한 예외 처리 케이스
    • 개발자들이 예외를 try-catch 로 적절하게 처리해야하지만,
    • 그냥 throws 해버리거나 무시하는 케이스가 상당히 많았음.
    • 그리고 에러처리를 본래 의도와 다르게 사용하는 경우도 있었습니다.

이러한 문제점 때문에,

  • 코틀린에서는 체크예외를 발생시키지 않는 것으로 언어의 철학을 설정한 것 같습니다.

try 사용법

fun readNumber(reader: BufferedReader): Int?{
    return try {
        val line = reader.readLine()
        println("line = $line");
        Integer.parseInt(line)
    } catch (e: NumberFormatException) {
        null // 예외가 발생하는 경우 null 을 반환한다.
    } finally {
        reader.close()
    }
}

fun main() {
    readNumber(BufferedReader(InputStreamReader(System.`in`)))
}

12l3j12j3l
line = 12l3j12j3l
  • 콘솔에서 데이터를 읽어서 출력하는 형태
    • try 식은
      • 마지막 식의 결과를 반환합니다.
    • 예외 처리로 발생한 결과를 return 을 통해 바로 반환이 가능합니다.

Uploaded by N2T