Chapter 8 예외처리

Red Culture·2021년 6월 21일
0

오류란

컴파일 오류: 프로그램 코드 작성 중 발생하는 문법적 오류
런타임 오류: 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 오류
시스템 오류: 가상 머신에서 발생, 프로그래머가 처리할 수 없음, 동적 메모리를 다 사용한 경우 등..
예외: 프로그램에서 제어할 수 있는 오류 (ex) 읽으려는 파일이 없는 경우, 네트워크 소켓 연결 오류 등..)

예외 처리 방법

1) try~catch
try {
// 예외가 발생할 수 있는 코드 부분
} catch(처리할 예외 타입 e) {
// try 블록에서 예외가 발생했을 때 수행되는 부분
}

2) try~catch~finally
try {
// 예외가 발생할 수 있는 코드 부분
} catch(처리할 예외 타입 e) {
// try 블록에서 예외가 발생했을 때 수행되는 부분
} finally {
// 예외 발생 여부와 상관없이 항상 수행되는 부분
// 리소스를 정리하는 코드로 주로 씀
}

3) try~with~resources
자바7부터 제공되는 리소스를 자동으로 해제하도록 제공해주는 구문
해당 리소스가 AutoCloseable을 구현한 경우 close()를 명시적으로 호출하지 않아도 try{} 블록에서 오픈된 리소스는 정상적인 경우나 예외가 발생한 경우 모두 자동으로 close()가 호출된다.
<자바9 이전> - try 괄호 안에 AutoCloseable을 implements 한 클래스의 객체의 타입을 선언해야 한다.

    public static void main(String[] args) {

        AutoCloseObj obj = new AutoCloseObj();

        try (AutoCloseObj obj2 = obj;) {
            throw new Exception();
        } catch (Exception e) {
            System.out.println(e );
        }
    }

<자바9 이후> = try 괄호 안에 AutoCloseable을 implements 한 클래스의 객체의 변수만 넣어도 된다.

    public static void main(String[] args) {

        AutoCloseObj obj = new AutoCloseObj();
        try (obj) {
            throw new Exception();
        } catch (Exception e) {
            System.out.println(e );
        }
    }

4) throws
try[]블록으로 예외를 처리하지 않고, 메서드 선언부에 throws를 추가하여 예외가 발생한 메서드에서 예외 처리를 하지 않고 이 메서드를 호출한 곳에서 예외를 처리한다. 만약 main에서 throws를 사용하면 가상머신에서 처리가 된다.

5) 다중 예외 처리
하나의 try{}블록에서 여러 예외가 발생하는 경우 catch{}블록 한 곳에서 처리하거나 여러 catch{}블록으로 나누어 처리할 수 있다. 가장 최상위 클래스인 Exception 클래스는 가장 마지막 블록에 위치해야한다.

6) 사용자 정의 예외
JDK에서 제공되는 예외 클래스 외에 사용자가 필요해 의해 예외 클래스를 정의하여 사용하는 것을 말한다. 기존 JDK 클래스에서 상속받아 예외 클래스를 만든다.

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글