본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2023-01-09(51day)

by elicho91 2023. 1. 9.

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

댓글