본문 바로가기

JAVA/JAVA

[자바의 정석] 8. 예외처리(Exception Handling)

 

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

- 소스코드를 컴파일 하면 컴파일러가 소스코드(*.java)에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지를 알려줌

 - 런타임 에러를 방지하지 위해서는 프로그램의 실행도중 발생할 수 있는 모든 경우의 수를 고려하여 이에 대한 대비를 하는 것이 필요함
 > 에러(error) : 발생하면 복구할 수 없는 심각한 오류
 > 예외(exception) : 발생하더라도 수습될 수 있는 비교적 덜 심각한 것 -> 적절한 코드로 비정상적 종료 방지 가능

 

예외 클래스의 계층구조

 

 


 - Exception 클래스와 그 자손들
 - RuntimeException클래스와 그 자손들

 - RuntimeException 클래스들은 주로 프로그래머의 실수에 의해서 발생될 수 있는 예외들, 자바의 프로그래밍 요소들과 관계
  > ex) ArrayIndexOutOfBoundsException, NullPointerException, ClassCastException, ArithmeticException

 - Exception 클래스들은 주로 외부의 영향으로 발생할 수 있는 것들, 프로그램 사용자들의 동작에 의해서 발생
  > FileNotFoundException, ClassNotFoundException, DataFormatException

 

예외처리하기 - try-catch문

예외 처리(exception handling)
 - 정의 : 프로그램 실행 시 발생할 수 있는 예외에 대비한 코드를 작성하는 것
 - 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상탤르 유지하는 것

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

1
2
3
4
5
6
7
8
9
10
try {
    //예외가 발생할 가능성이 있는 문장들을 
    } catch (Exception1 e1) {
        //Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 작성
    } catch (Exception2 e2) {
        //Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 작성
    } catch (Exception3 e3) {
        //Exception3이 발생했을 경우, 이를 처리하기 위한 문장을 작성
    }
 
cs

 - 하나의 메서드 내에 여러 개의 try-catch문이 사용될 수 있으며, try블럭 또는 catch블럭에 또 다른 try-catch문이 포함될 수 있음

 - try-catch문에서는 try 내에서 예외가 발생한 경우에만 일치하는 catch문을 찾은 후 try-catch문을 빠져나가서 수행을 진행하고, 그렇지 않으면 catch문을 거치지 않고 try-catch문을 빠져나가서 수행을 계속함
  > 예외가 발생하면 발생한 이후에 있는 try블럭의 문장들은 수행되지 않으므로, try블럭에 포함시킬 코드의 범위를 잘 선택해야함

 

 

출처 : <자바의 정석>, 남궁 성
        https://kookyungmin.github.io/language/2018/06/06/java_18/