공부함

Java에서의 예외처리 본문

Java

Java에서의 예외처리

찌땀 2023. 12. 15. 07:45

예외 클래스

  • Java에서 예외는 class로 선언된다.
    • Exception 클래스나 Exception의 서브클래스를 상속받아서 선언한다.
    • 클래스이므로 생성자, 멤버변수, 함수 등을 가질 수 있다.
  • 예외 클래스들은 일반 객체처럼 사용할 수 있다.
    • 일반 객체와 다른 점은 예외 클래스는 throw 할 수 있다는 것이다. 

Java의 예외 구조는 위와 같다. 실행시간에 발생하는 예외들은 RuntimeException을 상속하며, Runtime예외는 컴파일러에 의해 미리 검사할 수 없다. 

예외 처리

  • throw문을 통해 예외를 던진다. 
  • 예외가 발생했는데 handle하지 않으면  예외메세지가 표시된다. 
    • 예외메세지는 call stack trace를 포함한다. (main method부터 시작한 호출 과정)
  • try-catch-finally 문으로 예외처리를 한다. 
        try {
            int a = 100 / 0;
        } catch (ArithmeticException e) {
            System.out.println(e);
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        } finally {
            System.out.println("okay");
        }

예외 전파

handle되지 않은 예외는 caller(호출자)에게 전파된다. handle될 때 까지 전파된다.

main까지 전파되었는데도 handle되지 않으면 프로그램이 종료된다. 

컴파일러 예외 검사

  • 앞에서 설명했듯이 try-catch로 예외를 잡아야 한다.
  • 컴파일러가 compile-time에 발생가능한 예외에 대해 try-catch로 handle했는지 검사한다. 
    • handle하지 않으면 컴파일에러가 발생한다. (~~Exception must be caught or declared to be thrown)
  • try-catch로 handle하지 않았다면 함수 header부분에 throws로 선언해줘야 한다. 
void calculate(int a, int b) throws BaboException { ... }
  • 컴파일러는 호출된 함수의 header에 throws가 있으면 그 함수를 호출한 함수에서 try-catch로 해당 예외를 handle하는지 검사한다. 
    • 해당 함수에서도 handle하지 않는다면 해당 함수의 header에도 throws가 있어야 한다. 

Unchecked Exception

  • 컴파일러가 검사할 수 있는 예외를 Checked Exception이라 한다. 
  • RuntimeException을 제외한 모든 예외는 Checked Exception이다. 
  • RuntimeException을 상속하는 예외들을 UncheckedException이라 한다. 
    • 컴파일러는 UncheckedException에 대해서는 미리 검사하지 않는다.
    • 대신 프로그래머가 UncheckedException에 대해 책임져야 한다. 

막연히? 알고 있던 내용들인데, 시험공부 하는 김에 한번 정리했다 ^ㅇ^

'Java' 카테고리의 다른 글

Java 정렬  (0) 2023.12.25
StringBuilder, StringJoiner, String.format  (1) 2023.10.29