
Java에서는 예외를 처리하기 위해 다양한 예외 클래스를 제공합니다. 이러한 예외들은 크게 Checked Exceptions 와 Unchecked Exceptions 로 나누어집니다.
실행 중 발생할 수 있는 예외로, 이러한 예외는 반드시 처리해야 하며 (try-catch 또는 메서드에 throws 선언), 컴파일 시점에 검사됩니다. 대표적인 체크 예외는 다음과 같습니다.
IOException (File I/O 처리 관련 예외)
ClassNotFoundException
SQLException (Java Database Connectivity 관련 예외)
InterruptedException
프로그래머의 실수, 잘못된 로직, 또는 예상치 못한 상황에서 발생할 수 있는 예외로서, 고의로 처리하지 않아도 되고 컴파일 시점에 확인되지 않습니다. 대표적인 언체크 예외는 다음과 같습니다.
NullPointerException - 객체 초기화를 제대로 수행하지 않거나 사용 후에 null로 할당된 참조를 사용할 때 발생합니다.
IllegalArgumentException - 메서드에 잘못된 인수를 전달했을 때 발생하는 예외
IndexOutOfBoundsException - 배열이나 컬렉션에서 인덱스의 범위를 벗어나는 요소에 접근하려 할 때 발생하는 예외
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
IllegalStateException - 객체가 아직 준비되지 않았거나 더 이상 사용할 수 없는 상태일 경우에 발생
UnsupportedOperationException - 변경 불가능한 컬렉션에 요소를 추가하려고 할 때 이 예외가 발생
NumberFormatException - 숫자로 변환될 수 없는 문자열이 숫자로 변환되려는 경우 발생하는 예외
ArithmeticException
NoSuchElementException - 반복자를 사용할 때 요소가 더 이상 없는 상황에서 다음 요소를 요청하려는 경우 발생
ConcurrentModificationException - 컬렉션을 순회하는 동안 동시에 수정하려고 할 때 발생하는 예외입니다. 멀티스레드 환경 또는 싱글 스레드 환경에서 컬렉션의 구조를 변경하면 발생
RuntimeException은 언체크 예외의 상위 클래스로, 프로그래머의 실수나 예상치 못한 상황에서 발생합니다. 이 예외는 코드가 개선되면 발생하지 않으며, 명시적으로 처리하지 않아도 됩니다. NullPointerException, IllegalArgumentException 등 대부분의 언체크 예외는 RuntimeException을 상속받습니다.