Post

Java Exception

Java Exception

자바 프로그램 개발 시 예외 상황을 올바르게 관리해야 합니다. 본 글에서는 자바의 예외 계층 구조, 체크 예외와 언체크 예외의 차이, 공통 예외 처리 방법에 대해 알아보겠습니다.

자바 예외 계층 구조

자바에서 예외는 객체로 다루어집니다. Throwable을 최상위로 하여 Error와 Exception 두 가지로 분류됩니다.

graph TB
    subgraph "체크 예외"
        SQLException
        IOException
    end
    subgraph "언체크 예외 (런타임 예외)"
        NullPointerException
        IllegalArgumentException
    end

    Object --> Throwable
    Throwable --> Exception
    Throwable --> Error

    Exception --> SQLException
    Exception --> IOException
    Exception --> RuntimeException

    RuntimeException --> NullPointerException
    RuntimeException --> IllegalArgumentException

    Error --> OutOfMemoryError

  • Throwable: 모든 예외의 최상위 클래스이다.
  • Error: 시스템에서 발생하는 심각한 예외이며, 복구가 불가능하다.
  • Exception: 애플리케이션 로직에서 발생할 수 있는 예외이며 체크 예외와 언체크 예외로 나뉜다.

체크 예외와 언체크 예외

  • 체크 예외: Exception과 그 하위 예외이며, 반드시 명시적으로 예외 처리(try-catch)하거나 throws 선언을 해야 한다.
  • 언체크 예외: RuntimeException과 그 하위 예외이며, 명시적 예외 처리가 필수는 아니다.
구분체크 예외언체크 예외
throws 선언 필수 여부필수선택
컴파일러 체크 여부체크함체크하지 않음

공통 예외 처리 방법

개별적인 예외 처리보다는 처리할 수 없는 예외들을 공통으로 처리하는 방식이 효율적입니다.

flowchart LR
    subgraph "공통 예외 처리"
        EH[공통 예외 처리]
    end

    Main -->|호출| Service
    Service -->|호출| DatabaseClient
    Service -->|호출| XxxClient
    Service -->|호출| NetworkClient

    DatabaseClient -- DatabaseException --> Service
    XxxClient     -- XxxException     --> Service
    NetworkClient -- NetworkException --> Service

    Service -- 예외 전파 --> Main
    Main    -.->|공통 예외 처리| EH

이러한 공통 처리로 코드의 가독성과 유지보수성을 높일 수 있습니다.

Try-with-resources

자원을 자동으로 닫아주는 Try-with-resources는 자바 7에서 도입된 기능입니다. 이를 통해 자원의 누수를 방지하고, 코드가 간결해지며 가독성이 향상되었습니다.

장점

  • 리소스 누수 방지
  • 코드 간결성 및 가독성 향상
  • 자원의 스코프 한정
  • 자원 해제 속도 향상
1
2
3
4
5
try {
    networkService.sendMessage(input);
} catch (Exception e) {
    exceptionHandler(e);
}

맺음말

체크 및 언체크 예외의 적절한 활용, 예외 공통 처리 방법에 대한 이해에 도움이 되었기를 바랍니다.

This post is licensed under CC BY 4.0 by the author.