본문 바로가기
스터디/Java

[Java 자바] 체크 예외와 언체크 예외(Checked Exception, Unchecked Exception)

by dingwoon 2024. 11. 14.

1 예외(Exception)와 에러(Error)의 차이

1.1 예외(Exception)

예외(Exception)는 프로그램에서 발생할 수 있는 예상 가능한 문제를 나태낸다.
예외는 프로그램이 실행 중에 처리할 수 있고 복구할 수 있는 문제이다.
개발자는 try-catch 블록으로 예외를 적절하게 처리하고 정상적인 흐름으로 돌아갈 수 있다.

1.2 에러(Error)

에러(Error)는 심각한 문제를 나타내고, 일반적으로 프로그램이 복구할 수 없는 상황이다.
에러는 주로 JVM(Java Virtual Machine)에서 발생하며, 메모리 부족이나 스택 오버플로우 등이 있다.
일반적으로 개발자는 try-catch같은 것으로 이를 직접 처리할 수 없다. 발생 시 프로그램이 종료된다.

1.3 Throwable 클래스 구조


Java에서 Throwable은 예외(Exception)와 에러(Error)를 모두 나타내는 최상위 클래스로, Exception과 Error는 모두 Throwable을 상속받는다.

2 Java 예외

2.1 자바 예외 구조


Java에서 Exception은 크게 체크 예외(Checked Exception)언체크 예외(Unchecked Exception) 두 개로 나뉜다.
언체크 예외는 RuntimeException 클래스를 상속받거나 그 하위의 예외로 런타임 예외라고도 한다.
그리고 위의 구조에서 그 외의 예외를 체크 예외라고 한다.

2.2 체크 예외(Checked Exception)

2.1에서 말했듯이 RuntimeException 하위에 있지 않은 모든 예외를 체크 예외(Checked Exception)라고 한다.
체크 예외는 반드시 처리해야 하고, 처리하지 않으면 컴파일 에러가 발생해서 컴파일되지 않는다.

  • 처리 방법
    예외를 처리하는 방법에는 try-catch문으로 하는 방법이 있고, 함수 밖으로 던지는(throw) 방법이 있다.
  • 처리를 강제하는 이유
    체크 예외의 처리를 강제하는 이유는 예상 가능한 외부 자원 관련 오류(파일 입출력, 데이터베이스 조회, 네트워크 연결 문제 등)를 안전하게 처리하기 위함이다.

2.3 언체크 예외(Unchecked Exception 또는 Runtime Exception)

2.1에서 말했듯이 RuntimeException 클래스와 그 하위에 있는 모든 예외를 언체크 예외(또는 런타임 예외)라고 한다.
언체크 예외(런타임 예외)의 처리는 개발자의 선택이다. try-catch나 throw로 처리할 수 있고, 처리하지 않을 수도 있다.
체크 예외와 다르게 처리하지 않아도 컴파일 에러가 발생하지 않고, 실행이 가능하다.

  • 처리하지 않을 시
    처리하지 않은 언체크 예외는 자동으로 함수밖으로 던져(throw)진다.