CS

[java] Error, Checked Exception, Unchecked Exception

KJihun 2023. 11. 24. 15:50
728x90

java 실행 시(runtime) 발생할 수 있는 프로그램 오류는 크게

Exception, Error 이 두가지로 나눌 수 있다.

이 중, 개발자가 다뤄야 하는 Exception은 Checked Exception, Unchecked Exception로 나뉘게 된다.

 

 

 

 

 

 

Error

메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 복구할 수 없는 시스템에 비정상적인 상황이 발생했을 경우에 발생한다.
개발자가 예측하기도 어렵고, 딱히 처리할 수 있는 방법도 없다.

 

 

 

Exception

프로그램 실행 중에 개발자의 실수로 예기치 않은 상황이 발생했을 때 발생한다.

ArrayIndexOutOfBoundsException, NPE 등이 대표적인 예이다.

앞서 얘기한 예외들은 프로그램에 심각한 오류지만, 개발자가 복구할 수 있는 수준이다.

앞서 말했듯이, 예외에는 Checked Exception, Unchecked Exception 이 2가지로 나눌 수 있다.

 

 

Checked Exception

  • 컴파일러가 예외처리를 확인하는 Exception 클래스
  • RuntimeException의 하위 클래스가 아닌 Exception 클래스의 하위 클래스
  • Checked Exception은 반드시 에러 처리를 해야한다. (try/catch or throw)
    • 존재하지 않는 파일의 이름을 입력(FileNotFoundException)
    • 실수로 클래스의 이름을 잘못 적음(ClassNotFoundException)

 

Unchecked Exception

  • RuntimeException의 하위 클래스(컴파일러가 예외처리를 확인하지 않는다)
  • 실행 중에(runtime) 발생할 수 있는 예외를 의미한다. 체크 예외와는 달리 에러 처리를 강제하지 않는다.
    • 배열의 범위를 벗어난(ArrayIndexOutOfBoundsException)
    • 값이 null이 참조변수를 참조(NullPointerException)

만약 Unchecked Exception의 예외 처리를 강제해야 했다면 배열의 원소를 출력 시에도 try/catch문을 사용해야 한다.

이러한 RuntimeException은 개발자들에 의해 실수로 발생하는 것들이기 때문에 에러를 강제하지 않는다.

 

 

 

Checked Exception, Unchecked Exception의 Rollback 여부

  • Checked Exception: Rollback이 되지 않고 트랜잭션이 commit까지 완료된다.
  • Unchecked Exception: Rollback을 수행한다.

 

 

 

Checked Exception vs UnChecked Exception 선택하기

임의의 예외 클래스를 만들어 예외 처리를 하는 경우, try-catch로 묶어줄 필요가 있을 경우에만 Exception 클래스를 확장한다. 일반적으로 실행시 예외를 처리할 수 있는 경우에는 RuntimeException 클래스를 확장해 Unchecked Exception을 사용하는 것이 좋다.