BackEnd/Java

[Java] CheckException 과 UncheckedException의 차이

kangminhyuk1111 2023. 9. 4. 09:37

Java의 Exception

컴퓨터의 동작오류 및 하드웨어의 오류로 인한 실행의 오류가 발생한 경우, 자바에서는 에러(error)라고 합니다.
이것은 JVM 실행에 문제가 있다는 뜻으로 아무리 잘 만들어진 프로그램이라도 실행 불능 상태가 되어버립니다.

자바에서는 에러이외에 예외(Exception)이라는 오류가 존재합니다.
예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말합니다.
예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 동일합니다.

예외에는 두가지 종류가 있습니다.
하나는 일반 예외(Exception)이고, 다른 하나는 실행 예외(Runtime Exception)이다.

일반 예외는 컴파일 체크 예외라고도 하는데, 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문이다.
만약 예외 처리 코드가 없다면 컴파일 오류가 발생하게 된다.

실행예외는 컴파일하는 과정에서 예외 코드를 검사하지 않는 예외를 말한다. 컴파일 시 예외 처리를 확인하는 차이일 뿐, 두가지 예외 모두 예외 처리가 필요하다.

자바에서는 예외를 Class로 관리합니다.

클래스에 정의된 예외들 중 하나의 에러를 발생할 시 Exception클래스의 예외중 하나가 할당되어 객체가 생성됩니다.
이러한 방법으로 예외를 배출합니다.

Checked Exception

  • 컴파일러가 강제로 처리하도록 요구합니다.
  • try-catch 블록이나 메서드 시그니처에 throws 문으로 처리하거나 전달해야 합니다.
  • 주로 외부 요인(파일 입출력, 네트워크 연결 등)으로 인한 예외 상황을 나타냅니다.
  • 프로그래머가 예외 처리를 강제함으로써 프로그램의 안정성과 예측 가능성을 높이는 데 도움이 됩니다.

결론적으로 강제적으로 체크 해줘야 하는 예외라고 할 수 있습니다.

많이 발생하는 Checked Exception

FileNotFoundException
ClassNotFoundException
SQLException

Unchecked Exception

  • 컴파일러가 예외 처리를 강제하지 않습니다.
  • RuntimeException 클래스와 그 하위 클래스들로 구성됩니다.
  • 주로 프로그래머의 실수나 논리적 오류로 인한 예외 상황을 나타냅니다.
  • 예외 처리를 강제하지 않기 때문에 주의하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.

이 예외는 강제적으로 처리를 요구하지 않지만, 처리하지 않고 프로그램 진행중 예외가 발생한다면 프로그램이 종료 될 수 있기 때문에,
개발자가 직접적으로 예외처리를 해주어야 정상적으로 작동합니다.

많이 발생하는 Unchecked Exception

NullPointerException
ArithmeticException
ArrayIndexOutOfBoundsException
ClassCastException
IllegalArgumentException
IllegalStateException
UnsupportedOperationException

Throwable 객체?

                    +--------------+
                    |   Throwable  |
                    +--------------+
                           /     \
                          /       \
              +----------------+ +------------------+
              |    Error       | |    Exception     |
              +----------------+ +------------------+
                                  /        |        \
                    +----------------+  +-----+   +-------+
                    | RuntimeException| | ... | | Checked |
                    +----------------+  +-----+   +-------+

자바의 예외 클래스들은 Throwable 클래스에서 파생되며, 상속 관계에 따라 Checked Exception과 Unchecked Exception이 구분됩니다. 아래는 이들 간의 상속 관계를 나타낸 간략한 예외 클래스 계층 구조입니다.

  • Throwable 클래스: 모든 예외 클래스의 최상위 클래스이며, 예외 객체가 생성되고 처리될 때 기본적인 동작을 정의합니다. 두 개의 주요 하위 클래스인 Error와 Exception이 있습니다.

  • Error 클래스: 일반적으로 프로그램이 회복하기 어려운 심각한 오류를 나타내며, 주로 시스템 레벨 예외에 사용됩니다. 프로그램 코드에서 이를 처리하려고 하지 않는 것이 일반적입니다.

  • Exception 클래스: 프로그램 실행 중 예외 상황을 나타내며, 여기서 RuntimeException과 Checked Exception으로 나뉩니다.

  • RuntimeException 클래스: 주로 프로그래머의 실수나 논리적 오류로 인해 발생하는 예외를 나타내며, 컴파일러가 예외 처리를 강제하지 않습니다. 예를 들어, NullPointerException, ArrayIndexOutOfBoundsException 등이 있습니다.

  • Checked Exception (확인된 예외) 클래스: 주로 외부 리소스와의 상호작용에서 발생하는 예외를 나타내며, 컴파일러가 예외 처리를 강제합니다. 파일 입출력, 네트워크 연결 등의 작업에서 발생하는 예외가 여기에 해당합니다.

Unchecked Exception이 Runtime Exception에 상속된 예외 클래스 이며, 프로그래머의 실수 및 오류로 인해 발생하는 예외입니다.
즉 Runtime Exception에 속한 예외중 하나가 Unchecked Exception이라고 할 수 있습니다.

결론

checked Exception

반드시 체크해야하는 예외입니다. 강제적으로 예외처리가 필요합니다.

unchecked Exception

프로그래머의 재량에 따라 발생하는 예외를 나타냅니다. 컴파일러에서 강제성을 부여하지 않지만 예외처리를 프로그래머가 해줘야합니다.

반응형