본문 바로가기

Java&JSP&Spring/Java

[JAVA]자바의 예외처리(Exception) 정리 (1)

[JAVA]자바의 예외처리(Exception) 정리 (1)

 

 

이번 포스팅에서는 자바의 예외처리를 활용하는 방법에 대해서 정리해보려고 합니다.

 

예외(Exception)와 에러(Error)의 차이점

예외처리와 에러를 보통 에러로 통칭해서 부르기도 하는데 차이점이 있습니다.

예외처리(Exception)

개발자의 소스코드 및 내부 라이브러리로 인한 에러가 났을 경우를 예외(Exception)가 발생했다고 정의 할 수 있습니다.

예외가 발생했을 경우에는 개발자가 소스를 고쳐야 하는 경우가 발생 할 수도 있고, 설정파일을 바꿔야 하는 경우도 있고

라이브러리를 업데이트 해야 하는 경우 등 다양한 수정요인이 발생합니다.

그렇기 때문에 예외처리는 해당 원인을 신속하게 파악하기 위해서 꼼꼼히 해 두는것을 추천합니다.

소스코드로 인한 예외 : null로 취득한 데이터로 처리를 진행 했을 경우 (NullPointException)

라이브러리로 인한 예외 : SQL접속에 실패했을 경우 (JDBC라이브러리에서 예외를 일으킴)

에러처리(Error)

어플리케이션 외적인 요인으로 발생한 것에 대해서는 에러(Error)가 발생했다고 정의합니다.

이 경우에는 어플리케이션적으로 대응을 할 수가 없기 때문에 소스나 라이브러리를 확인 할 필요는 없습니다.

예외(Exception)의 구성

예외(Exception)와 에러(Error)는 전부 Throwable클래스로부터 상속받습니다.

Checked Exception과 Unchecked Exception의 차이

예외처리를 공부하다보면 Checked Exception과 Unchecked Exception이라는 단어를 듣게 됩니다.

두 단어의 차이를 아래에 간단하게 정리 해 보겠습니다.

  Checked Exception Unchecked Exception
처리여부 - 예외 선언시 처리를 강제합니다.
- 예외 코드가 선언된 메소드를 호출시 반드시 throw처리를 해 주어야 합니다.
- 명시적으로 처리를 추가하지 않아도 됩니다.
- 예외코드가 선언된 메소드를 호출해도 호출한 메소드에서는 예외처리를 하지 않아도 됩니다.
확인 시점 컴파일단계(IDE의 경우 소스코드 수정시 예외 확인) 
외부 라이브러리 문제일 경우에는 실행 단계에서 예외가 발생 되는 경우도 있습니다.
실행단계(소스코드를 읽으면서 예외 발생)
예외발생시 트랜잭션처리 roll-back실행하지 않음 roll-back실행
대표 예외 Exeption의 상속받는 하위클래스 중 Runtime Exception을 제외한 모든 예외 RuntimeException 하위 예외

예외 처리 방법

자바에서 예외를 처리하는 방법은 크게 두가지가 있습니다.

직접처리

매소드 내부에 try / catch를 선언하는 방법입니다. 

public void MethodA() {
    try {

    } catch (Exception e) {

    }
}

간접처리

매소드 이름 옆에 Exception을 추가해서 해당 예외가 날 수 있음을 명시해줍니다.

public void MethodB() throws RuntimeException {
}

상위클래스에 예외 호출시키기

상위 클래스에 예외를 호출시키는 방법은 아래와 같이 throw를 추가하는 방법이 있습니다.

이 경우 상위 클래스에 해당 Exception이 있는지 검색해서 해당 Exception의 catch를 통과하게 해 줍니다.

※ 검색하지 못했을 경우에는 최상위 클래스인 Exception을 통과합니다.

public void MethodA() {
    try {
        MethodB();
    } catch (RuntimeException e) {
        // RuntimeException이 발생했을 경우에는 여기를 통과
    } catch (Exception e) {
        // 그 외 Exception이 발생했을 경우에는 여기를 통과
        // 해당 Exception처리를 catch에 맨 마지막에 해 두어야 한다.
    }
}

public void MethodB() throws RuntimeException {
    throw new RuntimeException("Runtime Error!");
}

예외 처리시 자주 사용되는 메소드

예외 처리를 하면서 자주 사용되는 메소드가 있습니다.

getMessage

예외를 나타낼 때 콘솔창이나 로그에 메세지를 적고 싶을 때나 하위 클래스에서 적은 메세지를 상위 catch에서 취득하고 싶을 때 사용됩니다.

try {
    MethodA();
} catch (MyException e) {
    // "Error"
    e.getMessage();
}

public void MethodA() throws Exception {
    throw new Exception("Error");
}

printStackTrace

예외가 발생한 위치를 추적하기 위해 선언하는 메소드입니다.

try {
    MethodA();
} catch (Exception e) {
    e.printStackTrace();
}

public static void MethodA() throws Exception {
    throw new Exception("Error");
}

출력 결과

java.lang.Exception: Error
at com.test.MainClass.MethodA(MainClass.java:50)
at com.test.MainClass.main(MainClass.java:10)

다음 포스팅에서는 Exception을 만들어서 활용하는 방법에 대해 포스팅 하려고 합니다.

 

728x90
반응형