더북(TheBook)

catch 블록은 선언된 순서대로 예외 타입을 검사하기 때문에 어떤 타입을 처리할 수 있는 catch 블록을 그 타입의 상위 타입을 처리할 수 있는 catch 블록보다 앞에 작성해야 한다. 그렇지 않으면 상위 타입을 잡아내는 핸들러가 하위 타입인 예외도 모두 잡아내버린다. 다음 코드에서 NumberFormatExceptionException의 하위 타입이기 때문에 두 번째 catch 블록은 실제로는 죽어있는 코드다.

import java.lang.NumberFormatException

fun readInt(default: Int): Int {
  try {
    return readLine()!!.toInt()
  } catch (e: Exception) {
    return 0
  } catch (e: NumberFormatException) {
    return default // 죽은 코드
  }
}

자바 vs. 코틀린 자바에서는 도착할 수 없는 코드를 금지하기 때문에 이런 식의 코드는 금지된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.