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을 사용하는 것이 좋다.
'CS' 카테고리의 다른 글
[DB] Transactional 전파단계 (0) | 2023.12.04 |
---|---|
[Java] 강한 결합과 느슨한 결합 (0) | 2023.11.29 |
[java] String, StringBuilder, StringBuffer (0) | 2023.11.24 |
[java] 원시타입(Primitive types)과 참조타입(Reference types) (3) | 2023.11.24 |
[java] 동일성(identity, ==)와 동등성(equality, equals) (0) | 2023.11.24 |