예외처리

실전 자바 강좌 (ver.2018) - 초보부터 개발자 취업까지!! 강의를

개인공부하며 정리하는 용도의 포스팅입니다.

학습목표


  • 프로그램에 문제가 발생했을 때 시스템 동작에 문제가 없도록 사전에 예방하는

    코드를 작성하는 방법에 대해서 학습

예외란?


  • 프로그램에 문제가 있는 것을 말함
  • 예외로 인해 시스템 동작이 멈추는 것을 막는것

Exception

  • Error는 개발자가 대처할 수 있음

Error

  • Error는 개발자가 대처할 수 없음

Exception의 두 가지 경우

  • Checked Exception : ‘예외처리’를 반드시 해야하는 경우
    • ex) 네트워크, 파일 시스템 등
  • Unchecked Exception : ‘예외처리’를 개발자의 판단에 맞기는 경우
    • ex) 데이터 오류 등

Exception 클래스


하위클래스로 NullPointerException, NumberFormatException 등이 있다.

  • NullPointerException : 객체를 가리지 않고 있는 레퍼런스를 이용할 때
  • NumberFormatException : 배열에서 존재하지 않는 인덱스를 가리킬 때
  • NumberFormatException : 숫자데이터에 문자데이터 등을 넣었을 때

try ~ catch


개발자가 예외처리하기 가장 쉽고, 많이 사용되는 방법

try {
    예외가 발생할 수 있는 코드
} catch (Exception e) {
    예외가 발생했을 때 처리할 코드
}

코드 구현

int i = 10;
int j = 0;
int r = 0;

System.out.println("Exception BEFORE");

try {
    r = i / j;
} catch (Exception e) {
    e.printStackTrace();
    String msg = e.getMessage();
    System.out.println("Exception: " + msg);
}

System.out.println("Exception AFTER");

다양한 예외처리


Exception 및 하위클래스를 이용해서 예외처리를 다양하게 할 수 있다.

try {
    System.out.println("input i : ");
    i = scanner.nextInt();
    System.out.println("input j : ");
    j = scanner.nextInt();
    System.out.println("i / j = " + (i / j));
    
    for (int k = 0; k < 6; k++) {
        System.out.println("iArr["+ k + "] : " + iArr[k]);
    }
    
    System.out.println("list.size() : " + list.size());
} catch (InputMismatchException e) {
    e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

결과

exception1

finally


예외 발생 여부에 상관없이 반드시 실행된다.

try {
    System.out.println("input i : ");
    i = scanner.nextInt();
    System.out.println("input j : ");
    j = scanner.nextInt();
    System.out.println("i / j = " + (i / j));
    
    for (int k = 0; k < 6; k++) {
        System.out.println("iArr["+ k + "] : " + iArr[k]);
    }
    
    System.out.println("list.size() : " + list.size());
} catch (InputMismatchException e) {
    e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    System.out.println("예외 발생 여부에 상관없이 언제나 실행 됩니다.");
}

결과

finally

throws


예외 발생 시 예외 처리를 직접 하지 않고 호출한 곳으로 넘긴다.

throws

Reference


실전 자바 강좌 (ver.2018) - 예외처리

Comments