본문 바로가기

자바

JAVA Exception

예외란

우리는 Exception에 대해 다루기 전에 Exception과 Error에 대해 명확히 짚고 넘어가려고 한다.

Exception은 애플리케이션에서 참조하고 있는 값이 올바르지 않은 경우, 처리가 불가능한 경우 등 정상적인 프로그램의 구동 과정 중 어긋 난 경우에 나타난다. 그래서 우리는 이에 대한 처리를 직접 진행할 수 있다.

Error는 어떤 무언가에 의해 비정상적인 프로그램의 구동이 발생할 때 나타난다.

우리는 이에 대한 처리를 애플리케이션에서 발생하는 부분이 아니라 JVM에서 발생하는 에러로 시스템 레벨에서 처리가 가능하다.

그렇다면, 자바에서의 예외 클래스 구조에 대해서 살펴보자.

Exception과 Error 모두 Throwable클래스를 상속받아 구현되어있다.

그림에서 확인할 수 있듯이, 각각은 Checked ExceptionUnchecked Exception으로 나뉜다.

여기서, 우리가 유의할 점은 Exception에서 RuntimeException은 Unchecked Exception이며 나머지는 CheckedException이라는 것이다.

이 둘의 명확한 차이를 확인하기 위해 다음 표를 보자.

각각에 대한 간단한 예를 살펴보자.

우리가 해당 패키지에 test.txt파일이 없는 채로 다음을 실행하면 Checked Exception인 FileNotFoundException을 발생시킬 것이다.

FileInputStream is = new FileInputStream("test.txt"); 
// Exception in thread "main" java.io.FileNotFoundException: test.txt (지정된 파일을 찾을 수 없습니다)
  • 애초에 컴파일 시점에 에러를 잡아주기 때문에 빨간 줄로 에러가 표시된다.

우리가 어떤 수를 0으로 나눈다면 Unchecked Exception인 ArithmeticException을 발생시킬 것이다.

System.out.println(10 / 0);
// Exception in thread "main" java.lang.ArithmeticException: / by zero
  • 컴파일 이후 런타임 도중에 예외를 확인하므로 빨간 줄로 에러가 표시되지 않는다.

이제 예외에 대해서는 이해가 되었으니 어떻게 처리하는지 알아보자.

예외 처리

예외 복구

예외 상황을 파악하고 문제를 해결하여 정상 흐름으로 바꿔놓는 것을 의미한다.

try {
    ...
} catch (Exception e) {
    // 적극 활용하여 정상 흐름으로 진행
} finally {
    ...
}

예외처리 회피

예외 발생시, 자신을 호출한 쪽으로 예외를 던져 회피하는 방법이다.

(1) throws 문으로 선언해 던지는 방법

public void doSomething() throw Exception {
    ...
}

(2) catch 블럭에서 일단 예외를 잡은 후 throws 문으로 선언해 던지는 방법

public void doSomething() throws Exception{
    try {
        ...
    }
    catch(Exception e) {
        throw e
    }
}

예외 전환

예외가 발생하면 catch 블럭 안에서 조금 더 적합한 의미를 가지는 예외로 전환한다.

try {
     ...
} catch (Exception e) {
    throw new LoginException();
} finally {
     ... 
}

'자바' 카테고리의 다른 글

JAVA Collection  (0) 2021.10.15
JAVA Lambda, Functional Interface  (0) 2021.10.14
Java Optional  (1) 2021.10.04
Java Stream  (1) 2021.10.03
JVM, JRE, JDK  (0) 2021.09.18