자바에서 Exception은 Throwable의 하위 클래스로, 애플리케이션에서 처리 가능한 예외를 나타낸다. Exception을 크게 2가지로 보면
RuntimeException(Unchecked Exception) : 컴파일러가 강제로 처리하지 않음. 주로 프로그래밍 오류
그 외 Exception(Checked Exception) : 컴파일러가 try-catch 또는 throws로 처리하도록 강제. 주로 외부 요인에 의한 오류
복구가 가능하다면 Checked, 개발자의 실수라면 Unchecked를 선택하면 좋다.
RuntimeException 계열 : 컴파일러가 강제로 처리하지 않으므로 throws 선언이 필수는 아니다. 주로 코드 수정으로 방지 가능한 경우에 사용한다. throws 선언 없이 자유롭게 던질 수 있기 때문에 코드가 간결해진다.
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("나이는 음수일 수 없습니다.");
}
if (age > 150) {
throw new IllegalArgumentException("나이가 너무 큽니다.");
}
}
- IllegalArgumentException : 메서드에 전달된 인자가 유효하지 않을때. 즉, 잘못된 값이 전달될 때 ex) throw new IllegalArgumentException("잘못된 값")
- NullPointerException : null 참조를 사용하려 할 때. 즉, 필수 객체가 null일 때 ex) throw new NullPointerException("null 참조")
- IndexOutOfBoundsException : 배열/리스트의 유효하지 않은 인덱스 접근일 때. 즉, 인덱스 범위가 초과될 때 ex) throw new IndexOutOfBoundsException("인덱스 오류")
- IllegalStateException : 객체의 현재 상태에서 작업이 부적절할 때. 즉, 초기화되지 않은 상태에서 호출할 때 ex) throw new IllegalStateException("상태 오류")
- UnsupportedOperationException : 지원되지 않는 연산을 호출할 때. 즉, 읽기 전용 객체의 수정을 시도할 때 ex) throw new UnsupportedOperationException("지원하지 않음")
- ArithmeticException : 수학 연산 오류일 때. 0으로 나눴을 때 발생할 수 있는 상황 ex) throw new ArithmeticException("0으로 나눔")
- ClassCastException : 잘못된 타입을 캐스팅할 때. 즉, 객체를 호환되지 않는 타입으로 변환할 때 ex) throw new ClassCastException("캐스팅 오류")
- NumberFormatException : 문자열을 숫자로 변환에 실패할 때. 즉, "abc"를 정수형으로 변환을 시도할 때 ex) throw new NumberFormatException("숫자가 아니다")
- ConcurrentModificationException : 컬렉션 동시 수정 오류일 때. 즉. 반복 중 컬렉션이 수정될 때 ex) throw new ConcurrentModificationException()
그 외 Exception 계열 : 컴파일러가 try-catch 또는 throws로 처리하도록 하는 것으로 외부 요인에 의한 문제이다. 메서드에 throws {원하는 예외 처리} 를 선언해주어야 한다.
public void read(String path) throws IOException {
File file = new File(path);
if (!file.exists()){
throw new FileNotFoundException("파일이 없습니다."); // IOException의 하위 클래스
}
}
- IOException : 입·출력 작업이 실패할 때. 즉, 파일 읽기/쓰기, 네트워크 오류 등 ex) throw new IOException("입·출력 오류")
- FileNotFoundException : 파일을 찾을 수 없을 때. 즉, 지정된 파일 경로가 존재하지 않을 때 ex) throw new FileNotFountException("파일이 없습니다.")
- SQLException : 데이터베이스 작업에 오류가 발생할 때. 즉, 잘못된 쿼리, 연결 실패 등 ex) throw new SQLException("DB 오류")
- ClassNotFoundException : 클래스를 동적으로 로드에 실패할 때. 즉, Class.forName()에서 클레스가 없는 경우 ex) throw new ClassNotFoundException("클래스가 없습니다.")
- InterruptedException : 스레드가 대기중인 인터럽트인 상황. 즉, Thread.sleep() 중일 때 ex) throw new InterruptedException("스레드 중단")
- ParseException : 데이터 파싱에 실패할 때. 즉, 잘못된 날짜 형식 파싱인 경우 ex) throw new ParseException("파싱 오류" , 0)
- MalformedURLException : 잘못된 URL형식일 때. 즉, 유효하지 않은 URL 생성한 경우 ex) throw new MalformedURLException("잘못된 URL")
- TimeoutException : 작업 시간이 초과될 때. 즉, 네트워크 요청 시간이 초과된 경우 ex) throw new TimeoutException("시간 초과")
'🖥️ Back-end' 카테고리의 다른 글
웹 소켓이란? (0) | 2025.04.01 |
---|---|
데이터베이스 락(Lock) 이란? (0) | 2025.03.31 |
자바의 Record 란? (1) | 2025.03.27 |
DDD (Domain Driven Design) : 도메인 주도 설계 도전 1일차 (1) | 2025.03.13 |
웹 사이트의 동작 원리 (0) | 2025.03.11 |