[JAVA] 예외(Exception)와 에러(Error)

wannabeing·2025년 3월 24일
0

JAVA

목록 보기
3/3
post-thumbnail

✅ Throwable 클래스

  • Java 언어의 모든 오류 및 예외의 슈퍼 클래스
  • Exception과 Error는 해당 클래스를 상속받는다.

✅ Error (에러)

자바프로그램이 실행되는 JVM환경에서 발생하는 문제이다.
시스템 레벨에서 발생한 에러는 개발자가 조치하기 어렵다.

  • 개발자는 에러가 발생했다는 사실을 알 수는 있다.
  • 아래는 대표적인 에러이다.
    • OutOfMemoryError : JVM에 설정된 메모리의 한계를 벗어난 상황일 때 발생한다.
  • 유명한 이펙티드자바 책에서는 에러가 발생한 경우, try-catch로 잡지 말라고 조언한다. 잡아도 득보다 실이 많다고 한다...

✅ Exception (예외)

개발자가 구현한 로직에서 발생하며, 개발자가 다른 방식으로 처리가능한 것들이다.


예외의 두가지 종류가 있다. (Checked, Unchecked)

✅ Checked Exception

컴파일 때 체크되고, 예외 처리가 필수이다.
처리하지 않으면 컴파일 되지 않는다.

  • 사용자의 실수와 같은 외적인 문제로 발생하는 예외이다.
  • 반드시 try-catch 구문으로 예외처리를 해야한다.
  • RuntimeException 이외에 있는 모든 예외를 말한다.
    • FileNotFoundException: 존재하지 않는 파일의 이름을 입력
    • ClassNotFoundException: 실수로 클래스의 이름을 잘못 기재
    • DataFormatException: 입력한 데이터 형식이 잘못된 경우

✅ Unchecked Exception (런타임예외)

컴파일 때 체크되지 않고, 런타임에 발생하는 예외이다.
명시적인 처리를 하지 않아도 된다.

  • 개발자의 실수로 발생하는 예외이다.
  • RuntimeException 하위의 모든 예외
    • IndexOutOfBoundsException: 배열의 범위를 벗어남
    • NullPointerException(NPE): 값이 null인 참조 변수의 멤버를 호출
    • ClassCastException: 클래스 간의 형 변환을 잘못함
    • ArithmeticException: 정수를 0으로 나누는 산술 오류

❓ RuntimeException

  • Unchecked Exception이다.
    • 컴파일에 체크되지 않고, 런타임에 발생한다.
  • JVM 정상적인 작동 중에 발생할 수 있는 클래스이다.

🙋‍♂️ 에러와 예외의 차이는?

  • 에러 : 개발자가 수습하기 어려운 심각한 오류
  • 예외 : 개발자가 수습할 수 있는 다소 미약한 오류
  • 대부분의 예외는 개발자가 실수를 하여 발생한다.

🙋‍♂️ Checked, UnChecked 예외의 차이는?

  • Checked는 반드시 처리해야 한다. UnChecked는 하지 않아도 상관없다.
  • Checked는 컴파일단계에서 예외가 발생하고,
    UnChecked는 런타임단계에서 예외가 발생한다.
  • Checked의 경우, 외부 이유로 발생하는 경우가 있다.

🙋‍♂️ RuntimeException이 필수처리 예외가 아닌 이유?

  • UnChecked Exception이기 때문이다.
  • 컴파일 단계에서 예외가 발생하지 않기에, 필수처리 예외가 아니다.
  • 보통 개발자의 실수로 발생하기 때문에 컴파일러가 처리하지 않고,
    개발자가 직접 고치게 한다..!

예외 처리 방법

예외 처리 방법에는 예외복구, 예외처리 회피, 예외전환 등이 있다.


출처

profile
wannabe---ing

0개의 댓글