Java 예외 처리 패턴

프로그램 실행 중 발생할 수 있는 예외 상황을 안전하게 제어하고 시스템의 신뢰성을 확보하기 위한 자바의 예외 처리 메커니즘과 베스트 프랙티스를 분석한다.

예외 처리의 기본 구조

try-catch-finallytry-with-resources를 활용하여 자원을 안전하게 관리하고 에러에 대응한다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ExceptionHandler {
    public void readFile(String path) {
        // try-with-resources: 자원을 자동으로 해제 (AutoCloseable 구현체)
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            String line = reader.readLine();
            System.out.println("First line: " + line);
        } catch (IOException e) {
            // 구체적인 예외 처리
            System.err.println("File read error: " + e.getMessage());
        } catch (Exception e) {
            // 예상치 못한 범용 예외 처리
            System.err.println("Unknown error occurred.");
        } finally {
            // 예외 여부와 상관없이 항상 실행 (자원 해제 외 용도)
            System.out.println("Cleanup complete.");
        }
    }
}

Checked vs Unchecked Exception

| 구분 | Checked Exception | Unchecked Exception |

| :— | :— | :— |

| 확인 시점 | 컴파일 시점 | 런타임 시점 |

| 처리 강제 | 반드시 try-catch 또는 throws 필요 | 강제되지 않음 |

| 대표 예시 | IOException, SQLException | NullPointerException, IndexOutOfBoundsException |

| 주요 원인 | 외부 환경(파일, 네트워크 등) | 프로그래머의 논리적 실수 |

예외 처리 전략

  • 예외 복구: 예외 발생 시 다른 흐름으로 유도하여 프로그램을 정상 동작시킨다.
  • 예외 회피: throws를 통해 호출한 쪽으로 예외를 던져 처리를 위임한다.
  • 예외 전환: 발생한 예외를 더 명확한 의미를 가진 커스텀 예외로 감싸서 다시 던진다.

P.S

예외 처리는 단순히 에러를 막는 것이 아니라, 시스템이 예상치 못한 상황에서도 ‘우아하게’ 동작하도록 설계하는 과정이다.

무분별한 catch (Exception e) 사용을 지양하고, 발생 가능한 예외를 구체적으로 정의하여 대응해야 하는 것 같다.

Author avatar

웨이호프

WordPress creator and blogger.

View all posts