훌륭한 개발자가 되기 위하여
Kotlin에서의 Exception와 Error 개념 정리 본문
프로그램 오류
프로그램 실행 중 어떤 원인에 의해 오작동하거나 비정상적으로 종료되는 경우가 있다.
이러한 결과를 초래하는 원인을 프로그렘 오류 또는 에러라고 한다.
에러는 발생시점에 따라 3가지로 나뉜다.
- 컴파일 에러
- 컴파일 과정에서 발생하는 오류
- 문법 오류, 타입 불일치 등
- 프로그램이 실행되기 전에 발견됨
- 런타임 에러
- 프로그램 실행 중 발생하는 오류
- 주로 예외(Exception)나 에러(Error) 형태로 나타남
- 컴파일은 성공하지만 실행 중 비정상 종료될 수 있음
- 논리적 에러
- 프로그램은 정상적으로 실행되지만, 개발자의 의도와 다르게 동작하는 오류
- 컴파일러나 런타임에서 잡아주지 않음
예외 클래스의 계층 구조
Kotlin에서는 Throwable을 최상위 클래스로 하며, Throwable은 Error와 Exception으로 나뉩니다.
Java와 가장 큰 차이점은 Kotlin은 Checked Exception이 없다는 점이다.
그래서 예외에 대한 처리를 컴파일 시점에 강제하지 않기 때문에 함수 시그니처가 깔끔해지고 함수형 스타일, 코루틴과 잘 어울린다. 👉 try-catch가 람다 내부로 침투❌

Throwable : 모든 오류의 최상위 타입
Exception : 프로그래머의 실수나 외부 상황으로 발생하는 복구 가능한 예외(런타임 예외)
ex) RuntimeException : NullPointerException, IllegalArgumentException
- IOException : 입출력 관련 오류
- NumberFormatExcxeption: 숫자 변환 오류
Error : 시스템 문제 등 심각하고 복구 불가능한 상황
ex) OutOfMemoryError(메모리 부족), StackOverflowError
👉 Kotlin은 JVM 위에서 동작하므로 Java의 예외 계층 구조를 그대로 사용한다.
👉 예외(Exception)는 사람이 대비할 수 있는 영역이므로 반드시 처리해야 한다.
Kotlin과 Java의 차이점 : Checked Exception의 부재
Kotlin에는 Checked Exception 개념이 없다.
- 예외 처리를 컴파일 시점에 강제하지 않는다.
- throws 선언이 필수가 아님
- try-catch를 강제하지 않음
이로 인해, 함수형 프로그래밍 스타일에 적합하며 코루틴과 잘 어울림.
Checked Exception이란(Java 기준)
- 컴파일러가 예외 처리를 강제로 함
- 주로 외부 요인(IO, 네트워크, DB 등)으로 발생함
- 트랜잭션 도중 예외가 발생하면 롤백하지 않음
- 즉, 명시적인 예외 처리를 강제하기 때문에 Checked Exception이라하며, 반드시 try-catch로 예외를 잡거나 throw로 호출한 메소드에게 예외를 던져야 한다.
void read() throws IOException {
...
}
예외 처리하기(try - catch 문)
try {
// 예외가 발생할 수 있는 코드
} catch (처리할 예외 타입 e) {
// try 블록 안에서 예외가 발생했을 때 예외를 처리하는 코드
} finally {
// 예외 처리와 관계 없이 항상 실행되는 코드
}
정리
- 예외와 에러는 클래스이며, Throwable을 최상위로 한다.
- Kotlin은 Checked Exception을 제거하여 더 유연한 예외 처리 모델을 제공한다.
- 예외(Exception)는 반드시 처리해야 한다.
참고자료
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-throwable/
'Kotlin' 카테고리의 다른 글
| 파일데이터 시스템 (0) | 2024.08.05 |
|---|---|
| 비동기 처리 (0) | 2024.07.29 |
| 동기와 비동기, Thread와 Coroutine 그리고 여러 가지 패턴 (0) | 2024.07.28 |
| 객체 지향 프로그래밍(OOP)에 대하여 (0) | 2024.07.28 |
| 함수형 프로그래밍과 Sealed Class (2) | 2024.07.25 |