-
[코틀린 완벽 가이드] 3장 함수 정의하기 (3.5 예외 처리)코틀린 공부/코틀린 2023. 12. 29. 13:13
3.5 예외 처리
3.5.1 예외 던지기
오류 조건을 신호로 보내려면
fun parseIntNumber(s: String):Int { val num = 0 if(s.length !in (1..31)) throw NumberFormatException("Not a number: $s") for(c in s){ if(c !in '0'..'1') throw NumberFormatException("Not a number: $s") } return num }
3.5.2 try 문으로 예외 처리하기
fun readInt(default: Int): Int{ return try{ readln().toInt() }catch (e: NumberFormatException){ default } }
자바 7부터는 catch (FooException | BarException e) {} 같은 구문을 사용해 여러 예외를 처리할 수 있다.
하지만 코틀린에서는 아직 지원 X
catch 블록은 선언된 순서대로 예외 타입을 검사하기 때문에 어떤 타입을 처리할 수 있는 catch 블록을 그 타입의 상위 타입을 처리할 수 있는 catch보다 앞에 작성해야한다.
fun readInt1(default: Int): Int{ return try { readln().toInt() } catch (e: Exception) { 0 } catch (e: NumberFormatException) { default // 죽은 코드 } }
Exception이 더 상위 타입이라 NumberFormatException 부분이 죽은 코드가 되어 버린다.
자바와 코틀린 try문에서 가장 크게 다른 점은 코틀린 try가 식이라는 것이다.
fun readInt2(default: Int) = try { readln().toInt() } catch (e: NumberFormatException) { default }
try문의 다른 형태는 finally 블록을 사용한다. finally 블록은 try 블록을 떠나기 전에 프로그램이 어떤 일을 수행하도록 만들어준다.
fun readInt3(default: Int) = try{ readln().toInt() } finally { println("Error") }
이런 finally 블록은 try 블록 앞이나 내부에서 할당한 자원을 해제할 때 유용하다. 예를 들어 파일을 닫거나 네트워크 연결을 닫는 등의 일을 할 수 있다. 그리고 catch와 finally를 한 try 문 안에서 함께 사용 가능
try 블록을 식으로 사용할 경우, finally 블록의 값은 전체 try 블록의 값에 영향을 미치지 못한다.
'코틀린 공부 > 코틀린' 카테고리의 다른 글
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.2 널 가능성) (0) 2023.12.29 [코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.1 클래스 정의하기) (0) 2023.12.29 [코틀린 완벽 가이드] 3장 함수 정의하기 (3.3 조건문와 3.4 루프) (0) 2023.12.29 [코틀린 완벽 가이드] 3장 함수 정의하기 (3.1 함수) (0) 2023.12.28 [코틀린 완벽 가이드] 2장 코틀린 언어 기초 (2.3 - 2.4) (0) 2023.12.27