Exception 처리(1)
👉 오류(Error) VS 예외(Exception)
# 오류 (Error)
- 발생 위치 : 시스템 레벨에서 생성
- 발생 클래스 : java.lang.Error 클래스의 서브 클래스
# 예외(Exception)
- 발생 위치 : 개발자가 구현한 로직에서 발생
- 발생 클래스 : java.lang.Exception 클래스와 그 서브 클래스
- 필요한 이유 :
- 예외로 발생할 상황을 미리 예측하여 처리할 수 있다.
- 예외를 개발자가 처리할 수 있게 구분하고 그에 따른 처리 방법을 명확히 알고 적용할 수 있다.
- 예외를 통해 사용자에게 오류 발생을 알려야 한다. (안내를 위해) + 개발자에게도 알려야 한다. (오류 수정을 위해)
# JAVA Exception 에러 출력
- e.getMessage() : 에러의 원인을 간단하게 출력.
public class codeTest {
public static void main(String[] args) throws Exception{
try{
/* int로 형변환이 안되는 문자열을 넣어 강제로 Exception 발생 */
String product = "사과";
int productCnt = Integer.valueOf(product);
}catch (Exception e){
System.out.println(e.getMessage());
}
}
}
- e.toString() : 에러의 Exception 내용과 원인을 출력.
- e.printStackTrace() : 에러의 발생근원지를 찾아서 단계별로 에러를 출력.
public class codeTest {
public static void main(String[] args) throws Exception{
try{
String product = "사과";
int productCnt = Integer.valueOf(product);
}catch (Exception e){
System.out.println(e.toString());
}
}
}
✏️ log4j에서는 e.printStackTrace()를 log 안에 담을수 없기 떄문에 log.error("error : ", e); 로 사용
👉 Exception 의 종류
# 예외 클래스 (Checked Exception vs Unchecked Exception)
- 발생 위치 : 시스템 레벨에서 생성
- 발생 클래스 : java.lang.Error 클래스의 서브 클래스
# Checked Exception과 Unchecked(Runtime) Exception 처리
- Checked Exception이 발생할 가능성이 있는 메소드라면 반드시 로직을 try/catch로 감싸거나 throw로 던져서 처리.
- Unchecked Exception은 개발자가 부주의해서 발생하는 경우가 대부분이고, 미리 예측하지 못했던 상황에서 발생하는 예외가 아니기 때문에 굳이 로직으로 처리를 할 필요가 없도록 만들어져 있음.
# 예외 처리 방법
1. 예외 복구 : 예외가 발생하면 다른 작업 흐름으로 유도하는 방법
int maxretry = MAX_RETRY;
while(maxretry -- > 0) {
try {
// 예외가 발생할 가능성이 있는 시도
return; // 작업성공시 리턴
}
catch (SomeException e) {
// 로그 출력. 정해진 시간만큼 대기
}
finally {
// 리소스 반납 및 정리 작업
}
}
throw new RetryFailedException(); // 최대 재시도 횟수를 넘기면 직접 예외 발생
2. 예외처리 회피 : 처리를 하지 않고 호출한 쪽으로 던져버리는 방법
public void add() throws SQLException {
... // 구현 로직
}
3. 예외 전환 : 호출한 쪽으로 던질 때 명확한 의미를 전달하기 위해 다른 예외로 전환하여 던지는 방법
catch(SQLException e) {
...
throw DuplicateUserIdException();
}
🙋♂️ 소감 :
예외가 발생하여도 정상적인 흐름이 되어야 하기 때문에 예외 처리 작업은 정말 중요한 작업이다.
자바는 안전성이 중요한 언어로 대부분 프로그램에서 발생하는 오류에 대해 문법적으로 예외 처리를 해야 하고,
오류가 발생 했을 때 그 오류에 대한 기록을 남겨 디버깅에 용이하기 위해 충분한 로그를 남겨야 한다.
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2023-01-11(53day) / SQL 데이터 조회 / 변경 (0) | 2023.01.11 |
---|---|
[TIL] 2023-01-10(52day) (0) | 2023.01.10 |
[TIL] 2023-01-06(50day) (0) | 2023.01.06 |
[TIL] 2023-01-05(49day) (0) | 2023.01.06 |
[TIL] 2023-01-04(48day) (0) | 2023.01.04 |
댓글