본문 바로가기

Java/문법

[Java] 검사 예외 vs. 비검사 예외 (IOException, SQLException vs. NullPointerException, ArithmeticException)

들어가며

✍️ Keywords
: Java는 외부 리소스와 관련된 예외는 강제적으로 처리하여 안정성을 높이고, 프로그래머의 실수나 논리적 오류는 강제하지 않음으로써 유연성을 제공합니다.
Checked Exception (검사 예외), Unchecked Exception (비검사 예외), Error 
구분 상세 내용
Checked Exception 검사 예외, 컴파일러가 예외 처리를 강제로 하는 예외
외부 자원과 관련된 예외들이 많습니다.
(ex: IOException, SQLException)
Unchecked Exception 비검사 예외, 주로 프로그래머의 실수로 발생하는 예외
컴파일러가 예외 처리를 강제하지 않습니다.
(ex: NullPointerException, ArithmeticException)
Error 시스템 레벨의 심각한 문제, try-catch로 처리할 필요가 있습니다.
(ex: OutOfMemoryError, StackOverflowError)

 


✏️ 예외 계층 구조

ℹ️ Java의 예외 계층은 최상위 클래스와 그 하위 클래스들로 이루어져 있습니다.

 

  1. Object: 모든 클래스의 최상위 클래스입니다.
  2. Throwable: 예외와 오류를 포함하는 최상위 클래스입니다. 모든 예외 및 오류 클래스는 Throwable을 상속받습니다.
  3. Exception: Throwable의 하위 클래스이며, 프로그램에서 예외적인 상황을 나타냅니다. Exception은 다시 두 가지로 나눌 수 있습니다.
    • Checked Exception, Unchecked Exception
  4. Error: Throwable의 또 다른 하위 클래스입니다. 주로 시스템 레벨의 심각한 문제를 나타내며, 개발자가 직접 처리할 수 없는 경우가 많습니다.

 

✅ 검사 예외 (Checked Exception)

  • 컴파일 타임 예외
    • Java 컴파일러는 이 예외를 반드시 처리하도록 강제합니다.
    • 프로그램이 실행 중에 예측 가능한 외부 자원과 관련된 예외이며, 보통 파일 입출력이나 데이터베이스 접근 같은 작업에서 발생합니다.
  • 특징
    • 컴파일 타임에 예외 처리를 요구합니다.
    • IOException, SQLException과 같은 예외는 반드시 try-catch 구문으로 처리하거나, 메서드 선언에 throws 키워드로 선언해야 합니다.
검사 예외 종류 설명
IOException 파일이나 네트워크 입출력 중 발생할 수 있는 예외입니다.
SQLException 데이터베이스와 상호작용할 때 발생할 수 있는 예외입니다.
  • 정리
    • 이러한 예외들은 시스템 외부의 리소스 상태에 따라 발생할 가능성이 있습니다.
    • Java는 개발자가 반드시 이 예외를 처리하거나 throws로 던지도록 강제하여 프로그램의 안정성을 높이려고 합니다.

 

✅ 비검사 예외 (Unchecked Exception)

  • 런타임 예외
    • 컴파일러가 처리 여부를 검사하지 않기 때문에 try-catch로 강제적으로 처리할 필요가 없습니다.
    • 주로 프로그래머의 실수나 코드의 논리적 오류로 인해 발생할 수 있습니다.
  • 특징
    • 컴파일 타임이 아닌 런타임에 발생합니다.
    • Java는 이러한 예외에 대해 명시적인 예외 처리를 강제하지 않습니다.
비검사 예외 종류 설명
NullPointerException 널 객체에 접근하려 할 때 발생하는 예외입니다.
ArithmeticException 0으로 나누는 것과 같은 잘못된 산술 연산을 수행할 때 발생합니다.
  • 정리
    • 비검사 예외는 대부분의 경우 개발자가 직접 코드를 수정하여 해결할 수 있는 문제이기 때문에, 강제적인 예외 처리를 요구하지 않습니다.

 

✅ 오류 (Error)

  • 심각한 시스템 레벨의 문제
    • 주로 JVM의 상태나 메모리 부족과 관련된 예외입니다.
    • 일반적으로 개발자가 이 예외를 처리하려고 시도하지 않습니다.
  • 특징
    • 비검사 예외처럼 try-catch로 강제하지 않습니다.
  • 예시:
    • OutOfMemoryError: 메모리가 부족할 때 발생하는 오류입니다.
    • StackOverflowError: 재귀 호출이 너무 깊어져서 스택 메모리가 초과될 때 발생합니다.

정리하면

  • Unchecked Exception: 코드에서 발생할 수 있는 프로그래머의 실수나 로직 오류와 관련된 예외라서 강제적 예외 처리가 필요 없다고 봅니다.
  • Checked Exception: 외부 자원이나 예상 가능한 오류 상황에서 발생할 수 있으므로 반드시 예외 처리 방법을 정의하도록 강제하여 애플리케이션 안정성을 높입니다.
  • Error: 시스템 레벨의 심각한 문제로, try-catch로 처리할 필요가 없습니다.

 

[JAVA] 검사예외와 비검사예외

JAVA의 예외 처리는 모두 Throwable을 상속하고 있고 크게 Exception과 Error로 나뉜다. Exception은 검사 예외이고, Error는 비검사 예외이다.개발자가 명시해야 하는 부분은 검사 예외인 Exception으로 어플리

velog.io

반응형