예외처리

msung99·2022년 2월 15일
0


문제 발생의 종류

  • Exception
    • 개발자가 대처할 수 있음
    • ex) 어떤 수를 0으로 나눌 때 발생하는 오류
  • Error
    • 개발자가 대처할 수 없음
    • ex) 전력이 차단되는 경우, 소스코드를 구현하는데 메모리가 부족한 경우

Exception 종류

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

Exception 클래스의 계층 구조

Exception 클래스의 하위클래스 : NullPointerException, NumberFormatException 등이 있다.

  • NullPointerException : 객체를 가리키지 않고 레퍼런스를 이용할 때

  • ArrayIndexOutOfBoundException : 배열에서 존재하지 않는 인덱스를 가리킬 때

  • NumberFormatException : 숫자 데이터에 문자 데이터등을 넣었을 때

=> 암기할 필요없이 그냥 있는것만 알고 넘어가기


try-catch 구문

  • 개발자가 예외처리하는 구문

  • 형식

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

  • try 에서 예외가 발생한 구문이 있다면, catch 에서 예외를 처리하고 try 에서 그 구문 밑으로는 더 이상 코드가 실행이 안되고 try-catch 구문을 벗어난다.


Excepton 클래스의 메소드

  • printStackTrace() : 어떤 예외가 발생했는지 출력

  • getMessage() : 예외를 간략하게 나타낸 문자열을 리턴

예제1

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

try{
  r = i / j;
} catch ( Exception e) {

  e.printStackTrace(); //java.lang.ArithmeticExcpetion: / by Zero 출력

  String msg = e.getMessage();
  System.out.println("msg:" + msg); // msg: by Zero 출력
}

System.out.println("Excpetion After"); // try-catch 에서 예외가 발생해도
// 구문이 알아서 예외를 잡아주기 때문에 이 구문은 정상적으로 실행된다.

다양한 예외처리

  • try-catch 구문에서
    catch( ) 의 인자로 Exception 외에도 하위 클래스를 이용해서 예외처리를 할 수 있다.

  • catch 구문을 여러개 적어서, 여러 예외 처리를 동시에 할수도 있다.

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();
    System.out.println("첫번째 타입의 예외 발생!!");
    
} catch(ArrayIndexOutOfBoundException e){
    e.printStackTrace();
    System.out.println("두번째 타입의 예외 발생!");
    
} catch(Exception e){
    e.printStackTrace();
    System.out.println("그 외 타입의 예외 발생!!");
}

finally 키워드

  • try-catch 에서 예외 발생 여부에 상관없이 항상 실행되는 구문

  • try-catch 에서 예외 처리가 모두 끝난 후 마지막에 실행되는 구문이다

  • 형식

    try{
    ~~
    } catch {
    ~~
    } 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) { // Exception 의 하위 클래스
    e.printStackTrace();
    System.out.println("첫번째 타입의 예외 발생!!");
    
} catch(ArrayIndexOutOfBoundException e){ // Exception 의 하위 클래스
    e.printStackTrace();
    System.out.println("두번째 타입의 예외 발생!");
    
} catch(Exception e){
    e.printStackTrace();
    System.out.println("그 외 타입의 예외 발생!!");

} finally {
   System.out.println("예외 발생 여부에 상관없이 항상 실행됩니다!");
}

throws

  • 예외 발생시 예외 처리를 직접하지 않고 호출한 곳으로 넘긴다.
profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글