<목차>
1. Error & Exception
2. Exception Class 구조
3. Exception 처리 방법
[Error & Exception]
Error / 에러
JAVA 에서 Error 는 JVM에서 발생시키는 것으로, 애플리케이션 코드에서 처리할 수 있는 부분이 거의 없다.
대표적으로, OutOfMemory / StackOverFlow 등이 에러에 속하며, 에러가 발생한 시점에 처리하기 보다는 미리미리 애플리케이션의 코드를 살펴보며 에러가 발생하지 않도록 예방하여 원천적으로 차단해야 한다.
Exception / 예외
Exception 은 입력 값의 처리가 불가능하거나 참조된 값이 잘못된 경우 등, 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미한다.
코드 설계 및 테스트 단계에서 개발자가 직접 처리할 수 있는 내용이다.
[Exception Class 구조]
JAVA 에서 Exception 클래스들의 상속 구조는 다음과 같다.
- Exception 클래스들은 Throwable 클래스를 상속받고 있다.
- 다양한 Exception 클래스들 (IOException / RuntimeException ... ) 등은 Exception 클래스를 상속받고 있다.
이러한 다양한 종류의 Exception 들은 두 가지 구분으로 나눌 수 있다.
- Checked Exception
- 반드시 예외 처리가 필요하다.
- 컴파일 단계에서 확인 가능하다.
- Ex) IOException / SQLException / ClassNotFoundException ...
- Unchecked Exception
- 문법 상 문제는 없지만, 프로그램이 동작하던 중 예기치 않은 상황이 발생하는 케이스
- 명시적 처리를 강제하지 않는다.
- 실행 중 단계 (Runtime) 에서 확인 가능하다.
- RuntimeException 을 상속받는 Exception 클래스는 모두 이에 해당한다.
- Checked Exception
[Exception 처리 방법]
예외 상황은 크게 세 가지 방법으로 처리한다.
- 예외 복구
- 예외 상황을 파악하여 문제를 해결하는 방식을 의미한다.
- try / catch 구문을 사용하며,
try 문에서는 예외가 발생할 수 있는 코드를 작성하고
catch 문에서는 try 에서 예외가 발생했을 시, 예외 상황을 처리하는 내용을 작성한다.
- 예외 처리 회피
- 예외가 발생한 시점에 바로 처리하는 것이 아니라, 예외가 발생한 메서드를 호출한 곳에서 예외 처리를 할 수 있도록 전가하는 형태를 의미한다.
- throw 키워드를 사용하여, 어떤 Exception 이 발생했는지를 호출부로 전달한다.
- 예외 전환
- 예외가 발생했을 때, 어떤 예외가 발생했느냐에 따라, 호출부로 예외 내용을 전달하며 보다 적합한 타입으로 전환하여 전달할 필요가 있는 경우를 의미한다.
- 또는 애플리케이션에서 예외처리를 보다 단순히 만들기 위해 wrapping 하는 경우에도 사용된다.
- 흔히, 프로젝트에서 커스텀 Exception 을 구성하는 방법이다.
<예외 복구 Simple Example>
String s = "s";
try {
System.out.println(Integer.parseInt(s));
} catch (Exception e) {
s = "1";
System.out.println(Integer.parseInt(s));
}
<예외 처리 회피 Simple Example>
String s = "s";
try {
System.out.println(Integer.parseInt(s));
} catch (NumberFormatException e) {
throw new NumberFormatException("Not a Number");
}
<예외 전환 Simple Example>
String s = "s";
try {
System.out.println(Integer.parseInt(s));
} catch (NumberFormatException e) {
throw new CustomException(500, "Not a Number");
}
'Java' 카테고리의 다른 글
[Java] Lombok 롬복 라이브러리 (0) | 2024.07.26 |
---|