[KOTLIN] try catch finally

class Main {
    fun readNumber(reader: BufferedReader): Int? {
        return try {
            val line = reader.readLine()
            Integer.parseInt(line)
        } catch (e: NumberFormatException) {
            null
        } finally {
            reader.close()
        }
    }
}
  • 자바와 달리 함수가 던질 수 있는 예외 명시하지 않아도 된다.
    • 체크 예외
    • 언체크 예외를 구분하지 않는다.
    • 발생한 예외를 잡아내거나 잡아내지 않아도 됨
  • NumberFormatException 은 언체크 예외
    • 코틀린은 잡아내도록 강제 X
  • BufferedReader 의 경우
    • IOException 을 던질 수 있는데, 체크 예외
    • 자바에서는 반드시 처리해야한다.
    • 코틀린에서는?
      • 명시적으로 처리하지 않아도 된다.

개발자가 예외를 처리하기보단, 회피하려는 경향을 불러일으킬 수 있기에 체크예외에 대해 별도 처리를 강제하지 않음,.

  • 또한 자바 → 코틀린
    • 마이그레이션시 더 코드를 간단하게 마이그레이션이 가능함

Try 를 식으로 사용하는 법

  • ifwhen 같이 결과 값을 반환가능하다.
  • try 식의 결과 값은 try블록의 마지막 식
    • 혹은
  • catch 블록의 마지막 식이다.
fun main() {
    //시스템에서 입력받기
    val reader = BufferedReader(System.`in`.reader())
    readNumber(reader)
}

private fun readNumber(reader: BufferedReader) {
    val number = try {
        val line = reader.readLine()
        Integer.parseInt(line)
    } catch (e: NumberFormatException) {
        null
    }
    println("number: $number")
}
123123
number: 123123

위 코드에서 try 블록은 BufferedReader로부터 한줄을 읽고..

이를 정수로 변환하려고 시도한다.

만약 변환 과정에서 NumberFormatException이 발생하면 catch 블록이 실행되고, null이 반환.

그리고 println 함수를 통해 결과를 출력

try 식을 사용하면 다음과 같은 이점이 있습니다:

  • 코드 간결성
    • try 식을 사용하면 예외 처리 로직을 더 간결하게 표현할 수 있다.
  • 값 반환
    •  try 블록과 catch 블록 모두에서 값을 반환할 수 있으므로, 함수의 반환 값으로 직접 사용할 수 있다.
  • 제어 흐름
    • 예외가 발생해도 프로그램의 나머지 부분이 계속 실행될 수 있도록 제어 흐름을 관리할 수 있음.


Uploaded by N2T