Java예외와 입출력

예외와 checked unchecked 구분

Java 예외 모델의 핵심인 checked exception과 unchecked exception 차이, `try-catch-throws` 흐름을 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

java
try {
    Files.readString(path);
} catch (IOException e) {
    System.out.println("읽기 실패: " + e.getMessage());
}

설명

  • Java 예외는 단순한 오류 신호가 아니라, 호출 체인 전체가 실패 가능성을 어떻게 다룰지 드러내는 설계 요소입니다.
  • checked exception은 컴파일러가 처리 또는 전파를 강제하는 예외입니다. 보통 I/O처럼 복구 가능성이 있고 호출자가 대응을 고민해야 하는 문제에 자주 등장합니다.
  • unchecked exception은 RuntimeException 계열로, 컴파일러가 강제하지 않습니다. 주로 프로그래밍 오류나 잘못된 상태를 나타낼 때 많이 씁니다.
  • try-catch는 여기서 처리하겠다는 뜻이고, throws는 호출자에게 책임을 넘기겠다는 뜻입니다. 어느 쪽이 맞는지는 "이 계층이 이 오류를 의미 있게 처리할 수 있는가"에 달려 있습니다.
  • Java 예외 학습의 핵심은 문법보다 책임입니다. 무조건 catch하는 것도, 무조건 throws하는 것도 모두 좋지 않습니다.

빠른 정리

개념의미
checked exception처리 또는 전파를 컴파일러가 강제
unchecked exception런타임 오류 계열, 강제 없음
try-catch여기서 처리
throws호출자에게 책임 전달
선택 기준이 계층이 복구나 의미 있는 변환을 할 수 있는가

주의할 점

예외를 catch만 하고 아무 조치 없이 삼키면 디버깅이 매우 어려워집니다. 반대로 모든 계층이 그대로 throws만 하면 어디서 어떤 의미로 실패하는지도 흐려질 수 있습니다.

참고 링크

2 sources