2023. 1. 29. 21:34ㆍJAVA
1/29
트랜잭션에 대해서 공부하기 위해서 예외 관련해서 간단하게 정리하려고 한다.
* Checked Exception / Unchecked Exception
* Checked Exception -> RuntimeException 을 상속받지 않은 예외
- Compile 오류 O
- 예외 발생 시 롤백X
- 반드시 throws 예외를 처리해야 한다.
- ex) SQLException, IOExeption, FileNotFoundException 등
* Unchecked Exception -> RuntimeException 을 상속받은 예외
- Compile 오류 X
- 예외 발생 시 롤백O
- 명시적인 처리를 강제하지 않는다. (throws 굳이 안 써도 된다.)
- NullPointException, IndexOutOfBoundException, IllegalArgumentException 등
*** 예외처리 방식
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. throws 예외 발생
public void add() throws Exception {
throw new Exception("예외처리 발생!");
}
* 체크 예외의 문제점 (Web 프로젝트의 경우)
-> 처리할 수 없는 예외인 경우에는 계속해서 throws 를 던진다.
-> 그럼 예외로 계속 의존관계가 생성된다.
-> 하부 구현 기술이 바뀌면 예외처리도 전부 다 바꾸어야 한다.
-> 런타임 오류로 바꿔서 사용하자.
* 예외로 의존관계가 생성된 구조 (하부 구현 기술이 바뀌어서 예외 처리도 모두 변경해줘야 되는 예시)
*예외 전환시 주의할 점
- 반드시 기존 예외를 포함해줘야 한다.
ublic void call() {
try {
runSQL();
} catch (SQLException e) {
throw new RuntimeSQLException(e); //기존 예외(e) 포함
}
}
* 예외 출력
- 로그 출력시 마지막 파라미터에 예외를 넣어주면 로그에 스택 트레이스를 출력할 수 있다.
ex) log.info("message={}", "message", ex)
log.info("ex", ex)
'JAVA' 카테고리의 다른 글
[JAVA] 게시판 등에 자주 사용되는 "몇 분전, 몇 시간전, 2일전" 이런 표현 나타내기 (0) | 2023.05.02 |
---|---|
[JAVA] HashMap 구현 - Hash 값으로 index 만들어서 검색 효율 높이기 (0) | 2023.04.20 |
JSON 파일(데이터) 읽기/파싱 (json.simple.JSONParser) (0) | 2023.03.02 |
JSON 파일로 저장 (json.simple.[JSONObject/JSONArray] ) (0) | 2023.03.02 |