[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을 만들어서 활용하는 방법에 대해 포스팅 하려고 합니다.
'Java&JSP&Spring > Java' 카테고리의 다른 글
[JAVA]자바의 예외처리(Exception) 정리 (2) (0) | 2022.08.07 |
---|---|
[JAVA]Boolean↔String형변환 예제 (0) | 2022.03.19 |
[JAVA]자바의 Call by Value / Call by Reference (0) | 2022.03.13 |
[Java/JUnit5]#2 이클립스에서 JUnit 5 활용하기 (0) | 2021.12.20 |
[Java/JUnit5]#1 이클립스에서 JUnit 5 시작하기 (1) | 2021.12.20 |