예외처리

이영재·2022년 6월 18일
0

프로그램 오류

  • 컴파일 에러(compile-time error) : 컴파일할 때 발생하는 에러
    • javac.exe 자바컴파일러 : 구문체크, 번역, 최적화, 생략된 코드 추가.
  • 런타임 에러(runtime error) : 실행 중 발생하는 에러
    • 컴파일 시 에러가 없었다고 해서 런타임 에러가 없는 건 아니다.
  • 논리적 에러(logical error) : 작성 의도와 다르게 동작

Java의 런타임 에러

  • 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
    → 에러는 어쩔 수 없지만 예외는 처리하자!

예외처리(exception handling)

  • 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
  • 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
  • Exception 클래스들(+자손) : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
    예) IOException, ClassNotFoundException
  • RuntimeException 클래스들(+자손) : 프로그래머의 실수로 발생하는 예외
    예) ArithmeticException, ClassCastException, NullPointerException

예외 처리하기. try-catch 문

  1. try블럭 내에서 예외가 발생한 경우
    1) 발생한 예외와 일치하는 catch 블럭이 있는지 확인한다.
    2) 일치하는 catch 블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch 문을 빠져나가서 그 다음 문장을 계속 수행한다. 만일 일치하는 catch 블럭을 찾지 못하면, 예외는 처리되지 못한다. (프로그램 비정상종료)
  2. try블럭 내에서 예외가 발생하지 않은 경우,
    1) catch 블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
  • printStackTrace()와 getMessage(): 예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨져 있으며, 아래 메서드들을 통해서 이 정보들을 얻을 수 있다.
    catch블럭의 괄호()에 선언된 참조변수를 통해 이 인스턴스에 접근할 수 있다. 이 참조변수는 선언된 catch블럭 내에서만 사용 가능함.
    • printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
    • getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

예외 발생시키기

  1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
    Exception e = new Exception("고의로 발생시켰음");
  2. 키워드 throw를 이용해서 예외를 발생시킨다.
    throw e;
  3. 위 1, 2번을 하나로 합쳐서 사용.
    throw new Exception("고의로 발생시켰음");

메서드에 예외 선언하기

  • 예외를 처리하는 방법 :
    1) try-catch문 (직접처리)
    2) 예외 선언하기 (예외 떠넘기기. 알리기)
    3) 감추기 (빈 catch block)

  • 메서드가 호출될 때, 발생가능한 예외를 호출하는 쪽에 알리는 것 (예외 선언하기)

profile
왜why를 생각하는 두괄롬이 되자!

0개의 댓글