Notice
Recent Posts
Recent Comments
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

훌륭한 개발자가 되기 위하여

Kotlin에서의 Exception와 Error 개념 정리 본문

Kotlin

Kotlin에서의 Exception와 Error 개념 정리

jay20033 2025. 8. 17. 14:07

프로그램 오류

프로그램 실행 중 어떤 원인에 의해 오작동하거나 비정상적으로 종료되는 경우가 있다.

이러한 결과를 초래하는 원인을 프로그렘 오류 또는 에러라고 한다.

 

에러는 발생시점에 따라 3가지로 나뉜다.

  1. 컴파일 에러
    • 컴파일 과정에서 발생하는 오류
    • 문법 오류, 타입 불일치 등
    • 프로그램이 실행되기 전에 발견됨
  2. 런타임 에러
    • 프로그램 실행 중 발생하는 오류
    • 주로 예외(Exception)나 에러(Error) 형태로 나타남
    • 컴파일은 성공하지만 실행 중 비정상 종료될 수 있음
  3. 논리적 에러
    • 프로그램은 정상적으로 실행되지만, 개발자의 의도와 다르게 동작하는 오류
    • 컴파일러나 런타임에서 잡아주지 않음

예외 클래스의 계층 구조

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/

https://kotlinworld.com/516

https://jtm0609.tistory.com/250