JVM/Java

[Java]예외(Exception)관련 정리

Hyo Kim 2021. 4. 17. 22:22
728x90
반응형

- 첫 작성일 : 3월 20일 velog 블로그

서론

트랜잭션에 대해 공부하다보니 예외를 빼놓을 수 없어서 한 번 정리한다.

예외(Exception) 란?

예외는 크게 두 종류로 나뉘게 된다.
Checked Exception  Unchecked Exception 그리고 예외와 별개로 오류(Error)가 있다.
예외란 개발자가 로직을 잘못 짰거나 혹은 사용자가 잘못된 값을 넘겨 정상적인 프로그램 흐름에 벗어나는 행위를 말한다. 그래서 미리 예측을 하여 예외를 잡을 수 있다.

오류는 하드웨어에서 문제가 발생하는 경우도 있고, 완전 잘못된 로직을 짠 경우 등 시스템 레벨에서 발생하는 비정상적인 행위이기 때문에 이를 미리 예측해서 막을 수도 신경을 쓸 필요도 없다.

Checked Exception / Unchecked Exception 차이

간단하게 설명하자면
RuntimeException 를 상속받는 예외는 Unchecked Exception 이며,
반대는 Checked Exception를 의미한다.

예외Checked ExceptionUnchecked Exception

정의 Exception의 상속받는 하위 클래스 중
RuntimeException을 제외한 모든 Exception
RuntimeException을 상속받는 모든 Exception
처리여부 필수 생략가능 (필요에 따라 처리)
확인시점 Compile Time
이미 컴파일 시점 에러가 표시되기 때문에
확인하여 예외처리를 할 수 있다.
Run Time
컴파일 이후 런타임 도중 예외를 확인할 수 있다.
따라서 로직상에서는 생략은 가능하지만 미리 막아두는 것이 좋다.
트랜잭션 여부 예외 발생 시 롤백(rollback)을 진행하지 않음 예외 발생 시 롤백(rollback)진행

예외처리 방식


1. try-catch finally 직접 처리 방식

try {
    // 예외처리로 감쌀 로직 작성
} catch (NumberFormatException e) {
    System.out.println("정수변환이 안됨");
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("배열 범위가 벗어난경우");
} catch (ArithmeticException e) {
    System.out.println("0 으로 나눌경우");
} catch (RuntimeException e) { // 예상 못했던 에러 => 처리
    System.out.println("실행시 모든 에러를 처리");
} catch (Exception e) { // Exception
    System.out.println("수정이 가능한 모든 에러를 처리");
} catch (Throwable e) { // error, Exception 둘 다 처리 가능
    System.out.println("예외와 에러를 동시 처리");
} finally {
    System.out.println("무조건 실행");
}

작성된 코드가 있는 메소드 안에서 직접적으로 예외처리를 해주는 방식입니다.


2. throws 간접 처리 방식

public void add() throws Exception {
    // 로직 작성 
}

이 메소드 내에서 직접 에러를 처리 하지 않고, 해당 메소드를 호출한 쪽으로 예외처리를 던져 호출한 쪽에서 예외처리를 하게 회피하는 방식이다.


3. throw 예외 발생

public void add() throws Exception {
    throw new Exception("예외처리 발생!");
}

이 방식은 강제로 예외처리를 발생하는 방법이다.

 

결론

예외에 대해 배웠으니 이젠 예외처리 방식에 대해 어떤 방식이 나을 지 생각을 하고,
에러와 예외가 발생 시 어떤 상황인지 빠르게 파악해서 해결방안을 찾고,
필요에 따라 예외를 직접 발생시켜 개발자에게 알려줄 수 있도록 생각하면서 코딩을 할 수 있다.

참고

https://www.nextree.co.kr/p3239/
https://qh5944.tistory.com/32
https://interconnection.tistory.com/122
https://madplay.github.io/post/java-checked-unchecked-exceptions

728x90
반응형