1. 자바 예외(Exception)의 구조

자바에서는 발생하는 문제를 객체로 관리한다. 크게 `Error`와 `Exception`으로 나뉜다.
| 구분 | 설명 | 특징 |
| Error | 메모리 부족(OOM) 등 시스템 수준의 문제 | 복구 불가능, 프로그램 종료 |
| Exception | 로직 상의 오류나 외부 요인 (파일 없음 등) | 예외 처리(Handling)를 통해 복구 가능 |
[Checked Exception과 Unchecked Exception]
- Checked Exception: 컴파일 시점에 체크하며, 반드시 try-catch나 throws가 필요하다. 예외처리를 강제한다.
(e.g. IOException) - Unchecked Exception: RuntimeException을 상속받으며, 실행 시점에 확인한다. 예외처리를 강제하지는 않는다.
(예: NullPointerException)
2. try ~ catch 구문
try {
System.out.println("나눗셈 결과: " + (num1/num2));
} catch (ArithmeticException e) {
System.out.println("나눗셈 연산오류");
System.out.println(e.getMessage());
} finally {
System.out.println("무조건 실행되는 코드");
}
[Java 예외 클래스 예시]
- `ArrayIndexOutOfBoundsException`: 배열 접근 시 잘못된 인덱스 값 사용하는 경우
- `ClassCastException`: 허용할 수 없는 형 변환 연산을 한 경우
- `NullPointerException`: 참조변수가 null로 초기화 된 상황에서 메소드를 호출하는 경우
3. 사용자 정의 예외 클래스
[사용자 정의 예외 클래스 - `Exception`]
public class NotAvailableAgeException extends Exception {
public NotAvailableAgeException(msg) {
super(msg);
}
}
- 사용자 정의 예외 클래스는 반드시 `Exception` 클래스를 상송해야한다.
- `Exception` 클래스의 생성자(`super()`)에 예외 메시지를 전달한다.
[사용자 정의 예외클래스 사용 - `throw`, `throws`]
public class AgeInputExample {
public static void main(String[] args) {
System.out.print("나이를 입력하세요. : ");
try {
int age = readAge();
System.out.println("당신의 나이는 " + age + "세 입니다.");
} catch (NotAvailableAgeException e) {
System.out.println(e.getMessage());
}
}
private static int readAge() throws NotAvailableAgeException {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age <= 0) {
throw new NotAvailableAgeException("유효하지 않는 나이가 입력되었습니다");
}
return 0;
}
}
- throw (예외 발생): 예외 상황이 발생했음을 JVM에 알리기 위해 사용하며, 구문 뒤에 예외 클래스의 인스턴스를 명시한다. (`throw new 예외클래스();`)
- throws (예외 전파): 메소드 내에서 발생한 예외를 직접 처리하지 않고, 해당 메소드를 호출한 곳으로 책임을 전달할 때 사용한다. 메소드를 호출한 곳에 try - catch 문이 있어야한다.
'프로젝트 > Java' 카테고리의 다른 글
| [Java] 8. 람다함수, 함수형 프로그래밍, Stream API (0) | 2026.02.15 |
|---|---|
| [Java] 7. Wrapper 클래스, Collection 프레임워크 (0) | 2026.02.07 |
| [Java] 5. 문자열 (String, StringBuilder, StringBuffer), 자바 표준 입출력 (0) | 2026.01.29 |
| [Java] 4. 추상 클래스, 인터페이스 (0) | 2026.01.28 |
| [Java] 3. Object 클래스 (toString, equals, hashCode, clone) (0) | 2026.01.28 |