티스토리 뷰
오류의 종류
1. 오류
• Error
• 시스템이 종료되어야 할 수준의 수습할 수 없는 심각한 문제
• 시스템 레벨에서 발생
- 메모리 부족, 스택오버플로 등...
2. 예외
• Exception
• 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생
- NullPointerException, IllegalArgumentException 등...
* 오류와 예외는 다른 것이지만 보통 명시적으로 구분해야할 때가 아니면 오류라고 통일해서 부르는 것 같다.
예외 처리
• 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드를 작성하는 것
• 실행중인 프로그램의 비정상적인 종료를 막고, 상태를 정상 상태로 유지하는 것이 목적
• try {
// 예외가 날 가능성이 있는 코드
} catch (예외변수명: 예외타입) {
// 예외가 날 경우 실행할 코드
}
• try 안의 코드에서 예외가 나지 않을 경우 정상 진행, 예외가 날 경우 catch에서 해당 예외를 어떻게 처리할 것인지 작성.
• 발생하는 예외의 종류마다 다른 catch 가능.
- list 범위 초과 예외가 예상이 된다면 ArrayIndexOutOfBoundsException을 catch로 잡으면 된다.
- 어떤 종류의 예외가 발생할 지 예상할 수 없거나, 모든 종류의 예외를 잡고 싶으면 Exception을 사용.
* Exception : 모든 종류의 예외를 포함하는 예외 타입. 모든 예외의 부모 클래스.
• try가 정상 실행됐든, 예외가 catch가 됐든 상관없이 마지막에 실행하고 싶은 코드가 있다면 finally를 사용.
import java.lang.Exception
import java.lang.ArrayIndexOutOfBoundsException
import java.lang.IllegalArgumentException
// try, catch를 사용하지 않았을 때
val NUMBERS: List<Int> = listOf<Int>(1, 2, 3)
NUMBERS.get(5) // 예외 발생 : 범위 초과
// try, catch 사용 : Exception으로 잡기
try {
NUMBERS.get(5)
} catch (e: Exception) { // 모든 예외 캐치
println(e) // ArrayIndexOutOfBoundsException 출력
}
// try, catch 사용 : 예외 특정
try {
NUMBERS.get(5)
} catch (e: ArrayIndexOutOfBoundsException) { // 범위 초과 예외 캐치
println("범위 초과")
}
// try, catch 사용 : 잘못된 예외 캐치
try {
NUMBERS.get(5)
} catch (e: IllegalArgumentException) { // try에서 나오는 예외와 다른 예외 캐치
println("적절하지 않은 인자") // 범위 초과 예외가 잡히지 않아서 예외 발생
}
// try, catch 사용 : 여러 오류 캐치, finally 사용
try {
NUMBERS.get(5)
} catch (e: IllegalArgumentException) {
println("적절하지 않은 인자")
} catch (e: ArrayIndexOutOfBoundsException) {
println("범위 초과") // 해당하는 예외가 잡힘
} finally {
println("마지막에 무조건 실행")
}
* 예외의 종류를 다 외우고 있을 수 없기 때문에 먼저 Exception으로 모든 예외를 캐치하여 무슨 종류의 예외인지 확인해보는 것이 좋다.
참고 글
https://toneyparky.tistory.com/40
https://catsbi.oopy.io/92cfa202-b357-4d47-8de2-b9b3968dfb2e
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💻 Kotlin' 카테고리의 다른 글
[Android/Kotlin] 13. 일급 시민, 고차 함수, 람다식 (0) | 2022.10.07 |
---|---|
[Android/Kotlin] 12. 출력 (0) | 2022.10.07 |
[Android/Kotlin] 10. 반복문 (0) | 2022.10.06 |
[Android/Kotlin] 9. 이터러블(Iterable) (0) | 2022.10.06 |
[Android/Kotlin] 8. 컬렉션(Collection) (0) | 2022.10.05 |