✨ 오늘 공부한 것
- 알고리즘 피보나치 수 풀이 - Kotlin 문법 종합반 강의 5주차 - 개인 과제 해설 보고 코드 개선
전에 사용자 입력을 받을 때, 예외가 발생할 수 있는 구문을 try 블록으로 감싸는 방식을 사용했었다.
try {
result = x % y
println("나머지 결과 >> $result")
} catch (e: ArithmeticException) {
result = -1
println("0으로는 나눌 수 없습니다.")
}
이 때 나는 사실, 예외 처리를 할 수 있는 방식은 try-catch
밖에 없는 줄 알았다. 그러나 코틀린에는 require()
와 check()
라는 예외 처리 함수가 있다고 한다. 그리고 놀랐던건,
일반적인 코틀린 코드에서
try-catch
를 사용하면 안된다.
라는 사실을 알게되었다. 이 글에 따르면, 코틀린에서 예외의 주요 목적은 개발자에게 코드의 버그를 경고하는 역할이지, 프로그램의 요구사항을 충족하기 위해 사용하는 역할이 아니라는 것이다! 나는 그저 나누는 수가 0이면 안된다는 프로그램의 요구사항에 맞추려고 try-catch
를 사용했는데, 이 방법은 결코 좋은 방법이 아니었다.
require()
는 매개변수의 값을 체크하는 함수로, 잘못된 인자가 들어왔을 때 기본적으로 IllegalArgumentException 을 발생시킨다.
⭐ IllegalArgumentException
적절하지 않은 인자를 전달했을 때 발생
다음 코드에서는 require()
의 두 번째 매개변수인 lazyMessage로 ArithmeticException을 넣어주었기 때문에 해당 예외가 발생하게 된다.
// 괄호가 거짓이라면 ArithmeticException throw
require(y != 0) {
ArithmeticException("Divide by Zero")
}
return (x / y).toDouble()
추가로, 매개변수가 null인지를 체크해주는 requireNotNull()
도 있다고 한다.
require
과 비슷하지만, 기본적으로 IllegalStateException 을 발생시킨다는 차이점이 있다. 똑같이 null인지를 체크해주는 checkNotNull()
이 있고, 두 번째 매개변수 lazyMessage를 통해 예외를 발생시키거나 예외 메시지를 설정해줄 수 있다.
⭐ IllegalStateException
메소드를 호출할 상태가 아닐 때 발생
check(state.isNotEmpty()) { "잘못된 상태" }
던지는 예외가 다르다는 것 빼고는 똑같은 기능인 것 같지만, 사용하는 상황이 다르다고 한다.
require
check