[자바의 정석] - 예외(1)

magiri·2022년 10월 19일
0

예외 (오류)

프로그램이 실행 중 어떤 원인에 의해 오작동, 비정상적으로 종료되는 경우를 초래하는 원인

발생 시점에 따라,

  • 컴파일 에러
    : 컴파일 시 발생하는 에러
  • 런타임 에러
    : 실행 시 발생하는 에러
  • 논리적 에러
    : 실행은 되지만 의도와는 다르게 동작하는 에러

자바에서는 실행시 발생할 수 있는 프로그램 오류를 에러(Error), 와 예외(Exception)로 구분

  • 에러
    : 프로그램 코드에 의해 수습 불가능한 심각한 오류
  • 예외
    : 프로그램 코드에 의해 수습 가능한 다소 미약한 오류 (수습가능)

예외 클래스의 계층 구조

오류 클래스의 계층구조
오류클래스계층구조

예외 클래스의 계층구조

  • 모든 예외 최고 조상은 Exception클래스
  • 크게 Exception클래스와 그 자손들, RuntimeException과 그 자손들 두 분류로 나뉨
  • RuntimeException클래스도 Exception클래스의 자손이지만 특성이 달라 분류
  • Exception클래스와 자손클래스 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
  • RuntimeException클래스와 자손클래스 : 프로그래머의 실수로 발생하는 예외

예외 처리하기 try-catch문

예외처리(Exception Handling)란?

  • 정의 : 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것
  • 목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것

발생한 예외를 처리하지 못하면 프로그램은 비정상적으로 종료, 처리되지 못한 예외는
JVM의 예외처리기(UncaughtExceptionHandler) 가 받아서 예외의 원인을 화면에 출력한다.

try-catch문의 구조

  • 하나의 try블럭 다음에는 하나 이상의 catch 블럭이 올 수 있음
  • if문과는 달리, try블럭 catch블럭 내에 { } 생략 불가

흐름

  1. try블럭 내에서 예외가 발생한 경우
    1. 발생한 예외와 일치하는 catch 블럭이 있는지 확인
    2. 일치하는 catch 블럭을 찾게되면, 그 catch블럭 내의 문장들을 수행한 후 전체 try-catch문을 빠져 나가서 그 다음 문장을 계속해서 수행한다. ( 일치하는 catch블럭을 찾지 못하면 예외는 처리되지 못함)
  2. try블럭 내에서 예외가 발생하지 않은 경우
    1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 그 다음 문장을 수행한다.

+) try블럭에서 예외 발생 시 그 다음 문장은 실행되지 않고 catch블럭으로 이동한다.

예외 발생과 catch블럭

catch 블럭은 괄호() 와 블럭{} 두 부분으로 구분되는데,
괄호() 내에는 처리하고자 하는 예외와 같은 참조변수 하나를 선언해야 한다.

예외가 발생하면, 발생한 예외에 해당하는 클래스의 인스턴스가 만들어진다.
첫번째 catch 블럭부터 차례로 내려가면서 catch블럭의 괄호()내에 선언된 참조변수와 생성된 예외클래스의 인스턴스에 instanceof연산자를 이용해 검사결과가 true인 catch블럭을 만날때 까지 검사한다.

마지막 catch블럭 괄호()에 Exception클래스 타입의 참조변수를 선언해 놓으면 어떤 종류의 예외가가 발생해도 처리된다.

0개의 댓글