I take exception to that(나는 그에 대해 반대한다)의 exception인 예외 상황
예외 발생은 코드가 실행되면서 문제가 발생할 경우 현재 함수나 현재 영역의 진행을 막게 되는데,
우리는 이에 대한 처리와 조치를 취할 수 있어야 한다.
오늘은 이러한 처리와 조치를 알기 전 예외란 무엇인지 알아보고자 한다.
[ 예외 상황 ]
Exception
: 예외가 던져지면(throw 예외명(예외 처리)) 실행 경로가 중단되고, 예외 객체는 현재 문맥을 벗어남
: 프로그래머스가 실수한 코드를 수정해야 한다는 예외에 대한 정보를 표시
: 예외를 잡아내지 않을 경우, 프로그램이 중단되며 스택 트레이스가 출력
: 문제를 처리하기에 충분한 정보가 맥락에 존재하는 일반적인 문제와 구분해야 함
* 스택 트레이스 : 예외가 발생한 파일과 위치 등과 같은 상세 정보
[ 예외 예시 ]
1) 예외 발생 현황 파악
import atomictest.* // 이전 블로그'테스트' 참고
fun averageIncome(income:Int, months:Int) = income/months
fun main(){
averageIncome(3300, 3) eq 1100
capture{
averageIncome(5500, 0) // 예외 발생
} eq "ArithmeticException: / by zero"
}
- 나눗셈에서 분모인 months가 0이면 나눗셈이 ArithmeticException을 던지지만, 해당 코드에서는 정보를 출력해주지 않음
- months가 0이면 결과로 일반적인 정수값을 반환할 수 없는 것을 위해 null을 출력하도록 코드를 수정할 필요가 있음
2) 예외 시 null을 반환하도록 수정
import atomictest.*
fun averageIncome(income:Int, months:Int) = {
if(months == 0) null
else income/months
}
fun main(){
averageIncome(3300, 3) eq 1100
averageIncome(5500, 0) eq null
}
- months가 0일 경우 null을 반환하도록 수정하여, 함수가 null을 반환할 수 있는 경우, 코틀린은 함수의 결과값을 사용하기 전 null 여부를 먼저 검사할 수 있음
3) 예외를 던저 함수를 종료 후 처리
import atomictest.*
fun averageIncome(income:Int, months:Int) = {
if(months == 0) throw IllegalArgumentException("Months can't be zero") // 예외 던짐
else income/months
}
fun main(){
averageIncome(3300, 3) eq 1100
capture{
averageIncome(5500, 0)
} eq "IllegalArhumentException: " + "Months can't be zero"
}
- 'throw 예외 이름(예외 처리)' 를 통해 예외를 던짐
[ 오늘의 학습 소감 ]
오늘은 예외에 대한 기초적인 내용들만 다루는 아톰이었기에 어려운 내용은 아니었다. 하지만 예외는 언제 어디서든 발생할 수 있는 부분이기 때문에 개발자는 해당 부분을 잘 캐치하여 처리해 주어야 하기 때문에 아톰에서 설명한 것처럼 순서대로 차근차근 예외 발생 시점부터 해당 시점에 대한 예외를 던지는 것 까지 볼 수 있어서 좋았다. 오늘은 기초 부분만 했기 때문에 해당 예외를 던진 이후에 대한 처리 방법은 6부에서 진행하겠지만, 해당 아톰까지 갈 때 까지 예외에 대한 내용은 잊지 않기를...!
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 25] 가변 인자 목록 (0) | 2024.01.26 |
---|---|
[Atomic 24] 리스트 (feat. List / MutableList) (1) | 2024.01.25 |
[Atomic 22] 테스트 (0) | 2024.01.22 |
[Atomic 21] 패키지 (0) | 2024.01.22 |
[Atomic 20] 가시성 제한하기 (feat. 접근 변경자) (0) | 2024.01.19 |