Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 체크 예외 vs 언체크 예외: 핵심 차이점 총정리

자바(Java)에서 예외(Exception)는 프로그램 실행 중 발생하는 비정상적인 상황을 의미하며, 이를 어떻게 다루느냐에 따라 프로그램의 안정성이 크게 달라집니다. 자바의 예외는 크게 체크 예외(Checked Exception)언체크 예외(Unchecked Exception) 두 가지로 나눌 수 있습니다. 이번 글에서는 두 예외의 차이점을 자세히 살펴보겠습니다.

체크 예외(Checked Exception)란?

  • 컴파일 시점에 확인됩니다. 컴파일러가 해당 예외의 처리 여부를 반드시 검사합니다.

  • 예외 처리가 강제됩니다. try-catch 블록으로 직접 처리하거나, 메서드 선언부에 throws 키워드를 사용해 상위 호출자에게 위임해야 합니다.

  • Exception 클래스의 하위 클래스 중 RuntimeException을 상속하지 않는 예외들이 여기에 해당합니다.

  • JVM은 체크 예외가 반드시 catch되어 적절히 처리되기를 요구합니다.

  • 대표적인 예: FileNotFoundException, IOException, SQLException

언체크 예외(Unchecked Exception)란?

  • 런타임 시점에 발생합니다. 프로그램이 실제로 실행되는 도중에 나타나는 예외입니다.

  • 컴파일러가 검사하지 않습니다. 따라서 컴파일 단계에서 예외 처리 여부를 확인하지 않으며, 컴파일 시점에 catch하거나 처리할 수 없습니다.

  • 주로 프로그래밍 실수로 인해 발생합니다. 예를 들어 null 객체 참조, 배열 범위 초과 등이 대표적입니다.

  • RuntimeException 클래스의 하위 클래스에 속하며, 컴파일러가 예외 처리를 강제하지 않습니다.

  • JVM 역시 해당 예외의 catch 및 처리를 필수로 요구하지 않습니다.

  • 대표적인 예: NoSuchElementException, NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

체크 예외 vs 언체크 예외 비교 정리

구분체크 예외언체크 예외
발생 및 확인 시점컴파일 시점에 확인런타임 시점에 발생
컴파일러 검사검사함검사하지 않음
예외 처리 강제 여부강제 (try-catch 또는 throws 필수)강제하지 않음
상속 관계Exception 하위 (RuntimeException 제외)RuntimeException 하위
대표 예시FileNotFoundException, IOExceptionNoSuchElementException, NullPointerException

정리하면, 체크 예외는 컴파일러가 미리 확인하고 처리를 강제하는 예외이며, 언체크 예외는 주로 개발자의 코드 실수로 인해 런타임에 발생하는 예외입니다. 두 예외의 특성을 정확히 이해하고 상황에 맞게 처리하면, 더욱 견고하고 안정적인 자바 애플리케이션을 개발할 수 있습니다.