체크 예외

SungMin·2026년 6월 2일

자바 심화 정리

목록 보기
26/34

Exception과 하위 예외는 모두 컴파일러가 체크하는 체크 예외다.
체크 예외는 잡아서 처리하거나, 밖으로 던지도록 선언해야한다.
안 그러면 컴파일 오류가 발생한다.


package exception.basic.checked;
/**
 * Exception을 상속받은 예외는 체크 예외가 된다.
 */
public class MyCheckedException extends Exception {
  public MyCheckedException(String message) {
    super(message);
  }
}
  • 예외클래스를 만들려면 예외를 상속받으면 된다.
  • Exception을 상속 받은 예외는 체크 예외가 된다.

package exception.basic.checked;
  public class Client {
   public void call() throws MyCheckedException {
     throw new MyCheckedException("ex");
  }
}
  • throw 예외라고 하면 새로운 예외를 발생시킬 수 있다.
    예외도 객체이기 때문에 new를 통해서 생성해야 한다.
  • throws는 해당 메서드가 발생한 예외를 직접 처리하지 않고 호출한 곳으로 전달(위임)한다고 선언하는 것이다.

public void callCatch() {
 try {
 client.call();
 } catch (Exception e) {
 //예외 처리 로직
 }
 System.out.println("정상 흐름");
}
  • catch에 예외를 지정하면 해당 예외와 하위 예외도 잡을 수 있다.
  • 물론 정확하게 잡고 싶다면 해당 예외를 작성하면 된다.
  • 예외도 객체이기에 다형성이 가능하다.

package exception.basic.checked;
  public class CheckedThrowMain {
   public static void main(String[] args) throws MyCheckedException {
    Service service = new Service();
    service.callThrow();
    System.out.println("정상 종료");
  }
}
  • 예외를 처리하지 않고 던졌기에 main메서드까지 올라왔다.
  • 여기서 예외를 처리하지 못 할 경우 main메서드 밖으로 던져진다.
  • 예외가 main() 밖으로 던져지면 예외 정보와 스택 트레이스(Stack Trace)를 출력하고 프로그램이 종료된다.

체크 예외의 장단점

  • 장점: 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡을 수 있다.
    이를 통해 개발자는 어떤 체크 예외가 발생했는지 쉽게 파악할 수 있다.
  • 단점: 실제로는 개발자가 모든 체크 예외를 반드시 잡거나 처리해야하기 때문에 번거로울 수 있다.

[정리]

  • 체크 예외는 컴파일러가 처리 여부를 검사하는 예외이다.
  • 체크 예외는 잡아서 직접 처리하거나 밖으로 던지거나 둘 중에 하나를 개발자가 명시적으로 처리해야한다.
  • 그렇지 않을 경우 컴파일 에러가 발생한다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글