JoJun's
Jun's Devlog
JoJun's
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Java (16)
      • SpringBoot (12)
      • Java (4)
    • Linux (11)
      • CentOS (4)
      • 명령어(CentOS) (5)
      • Docker (2)
    • DataBase (15)
      • 튜닝 기법 (1)
      • MSSQL (7)
      • SQLD,SQLP (6)
    • 알고리즘 (4)
      • 정렬 (1)
      • 해시 (1)
      • 완전탐색 (1)
      • 탐욕법 (1)
    • 인프라 (3)
    • Web (2)
    • 개인공간 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • log4j2
  • 알고리즘
  • @Component
  • MSSQL
  • cors
  • Dockerfile
  • Java
  • springboot
  • docker
  • 파일그룹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JoJun's

Jun's Devlog

[Java] CheckedException과 UncheckedException이야기
Java/Java

[Java] CheckedException과 UncheckedException이야기

2021. 12. 30. 16:01
728x90
반응형

이번 포스트에서는 Exception에 대한 이야기를 써보려고 한다.

요즘 프로그래밍을 배우는 개발자들을 보면 Exception의 처리를 중요시하지 않는 경우가 많다. 또 Exception이 무엇인지 질문하게 되면 제대로 대답하는 이들이 적다.

단순히 Exception 암기 방식으로 몇가지 예외를 외우고 해당 서비스를 구현할 때 try/catch문을 사용하는 공식적인 공부를 하는 것 같다.

이 포스트를 통해 Exception에 대해 알아보자. 먼저 Error와 Exception이 무엇이 다른지를 알아야 한다.

● Error와 Exception는 어떻게 다를까?

  • 오류(Error)는 시스템 레벨에서 발생하며 심각한 수준의 오류이다. 시스템에 비정상적인 상황이 발생한 경우이며, 개발자가 미리 예측하여 대비할 수 없기 때문에 개발자 입장에서는 오류에 대한 처리를 신경 쓰지 않아도 된다. 예를 들면, 컴파일 시 문법적인 오류, 포인터 참조 오류, 메모리 부족 오류 등등.
  • 예외(Exception)는 컴퓨터 시스템의 동작 도중 예측하지 못한 상태가 발생하여 수행 중인 애플리케이션이 영향을 받는 것, 개발자가 미리 예측이 가능하며, 개발자가 처리할 수 있기 때문에 예외를 구분하고 처리 방법을 명시하여 대비할 수 있다, 예를 들면, Input값이 널로 들어오는 경우 등등

Exception의 하위구조에는 여러 가지의 Exception 종류가 있다 아래는 예외 클래스의 구조를 간단하게 표현하고 있는 그림이다.

Throwable를 상속받는 클래스 중에 Exception 클래스가 있다. 이 Exception도 수많은 자식 클래스를 가지고 있는데 그중에 RuntimeException이 중요하다.

RuntimeException은 Exception이 CheckedException이냐 UncheckedException이냐를 구분하는 기준이다.

Exception의 자식 클래스 중에 RuntimeException을 제외한 모든 Exception은 CheckedException이고, RuntimeException과 자식 클래스들은 UncheckedException이다.

● CheckedException과 UncheckedException(Runtime) 차이.

  CheckedException UncheckedException
처리여부 반드시 예외를 처리해야 함(필수) 예외 처리를 하지 않아도 된다. (선택)
확인여부 컴파일 중에 체크 런타임(서비스 진행)중에 체크
예외 발생시 트랙젝션 처리여부 롤백이 되지 않는다. 롤백이 된다.
발생 외부 영향으로 발생 (사용자 동작, 운영체제 등) 개발자의 실수, 도메인 문제 등
예외 종류 Exception을 상속받는 클래스 - IOException - SQLException RuntimeException을 상속받는 클래스 - NullPointerException - SystemException - IndexOutOfBoundException - CustomException

위의 표에서 가장 중요한 것은 처리여부와 예외 발생 시 트랜젝션 처리 여부 이 두 가지이다.

꼭 처리를 해야 하는 CheckedException의 경우는 try/catch문으로 예외를 처리해주어야 하는 반면에 UncheckedException은 꼭 처리를 하지 않아도 된다. 하지만 서비스 도메인에 문제를 주거나 서비스를 하는데에 있어 문제가 발생할 수 있다.

두 번째로 트랙잭션 여부이다. 기본적으로 CheckedException이 발생하면 트랜잭션이 roll-back하지 않고 예외를 Throw 하게 된다. 하지만 UncheckedException은 예외 발생 시 트랜잭션을 roll-back 한다는 점이다. 개발자가 개발하면서 Exception 트랙잭션 여부를 알아야만 실행결과가 맞지 않거나 예상치 못한 예외가 발생하는 것을 방지할 수 있다.

728x90
반응형
저작자표시 (새창열림)

'Java > Java' 카테고리의 다른 글

JUL (java.util.logging) vs Log4j2 vs SLfj2 비교하기.  (1) 2023.12.07
[Java] InvalidKeyException AES 256 암호화 에러  (0) 2022.02.10
[Java] Log4j 원격코드실행 이슈 JNDI injection  (0) 2021.12.30
    'Java/Java' 카테고리의 다른 글
    • JUL (java.util.logging) vs Log4j2 vs SLfj2 비교하기.
    • [Java] InvalidKeyException AES 256 암호화 에러
    • [Java] Log4j 원격코드실행 이슈 JNDI injection
    JoJun's
    JoJun's
    JoJun's의 기술블로그

    티스토리툴바