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

Hyo·2021년 3월 20일

java

목록 보기
2/2

블로그 이전

https://kdhyo98.tistory.com/30

서론

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

예외(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

profile
생각중..🤔🤔🤔

0개의 댓글