예외 (exception)
- 실행 도중의 잠재적인 오류까지 검사할 수 없기 때문에 정상적으로 실행이 되다가
비 정상적으로 프로그램이 종료되는 경우
- 운영체제의 문제 (잘못된 시스템 호출의 문제)
2. 입력값의 문제 (존재하지 않는 파일 혹은, 숫자 입력란에 문자 입력 등)
3. 받아들일 수 없는 연산 (0으로 나누기 등0
4. 메모리 할당 실패 및 부족
5. 컴퓨터 기계 자체의 문제
예외를 대비하기 위한 구문
try {
예외 발생 가능성 있는 문장
} catch (e: 예외처리 클래스명) {
예외를 처리하기 위한 문장
} finally {
반드시 실행되어야 하는 문장
}
fun main() {
val a = 6
val b = 0
val c: Int
try {
c = a / b
println("After")
} catch (e: Exception) {
println("Exception")
} finally {
println("Finally")
}
}
산술 연산에 대한 예외를 따로 특정해서 잡을 때
try {
} catch (e: ArithmeticException){
println("exception is handled. {$e.message}")
}
- ArithmeticException을 사용하면 /by zero 와 같은 상세한 내용을 표시함.
스택의 추적
try {
} catch (e: Exception){
e.printStackTrace()
}
- printStackTrace()를 사용하면
java.lang.ArithmeticException: / by zero
at com.acaroom.kotlin.chap04.section3.TryCatchKt.main(TryCatch.kt:9)
와같은 자세한 에러발생 위치를 표시해주게 된다.
특정 조건에 따른 예외 발생
throw Exception(message: String)
- throw로 특정 예외를 발생시킬 수 있다.
fun main() {
var amount = 600
try {
amount -= 100
checkAmount(amount)
} catch (e: Exception) {
println(e.message)
}
println("amount: $amount")
}
fun checkAmount(amount: Int){
if (amount < 1000)
throw Exception("잔고가 $amount 으로 1000 이하입니다.")
}
- 잔고가 1000 이하일때 throw를 사용해 예외를 발생시키는 코드이다.
- amount에서 복합연산자로 값을 낸 후 catch에서 Exception값을 받아와 print하는 내용이다.