Java/Java 문법
런타임 예외 (Runtime Exception)
열심히 해
2024. 9. 23. 13:55
런타임 예외(Runtime Exception)는 자바에서 실행 중에 발생할 수 있는 예외 유형으로, 프로그램의 실행 도중에 나타나는 오류를 의미합니다. 이들은 주로 프로그래밍의 논리적 오류로 인해 발생하며, 컴파일 시점에서 발견되지 않습니다. 런타임 예외는 RuntimeException 클래스를 상속받는 예외들로 구성됩니다.
주요 특징
- 발생 시점: 프로그램 실행 중에 발생합니다.
- 처리 필수 아님: 일반적으로 try-catch 블록으로 처리할 필요가 없습니다. 즉, 런타임 예외는 체크 예외(checked exception)와 달리 컴파일러에 의해 강제되지 않습니다.
- 주로 프로그래밍 오류: 주로 잘못된 로직, 배열 인덱스 초과, null 참조 접근 등과 같은 프로그래밍 오류에 의해 발생합니다.
주요 런타임 예외 종류
1. NullPointerException: null 객체를 참조하려고 할 때 발생합니다.
String str = null;
int length = str.length(); // NullPointerException 발생
2. ArrayIndexOutOfBoundsException: 배열의 유효하지 않은 인덱스에 접근할 때 발생합니다.
int[] arr = {1, 2, 3};
int value = arr[3]; // ArrayIndexOutOfBoundsException 발생
3. ClassCastException: 잘못된 타입으로 객체를 캐스팅하려고 할 때 발생합니다.
Object obj = new Integer(100);
String str = (String) obj; // ClassCastException 발생
4. ArithmeticException: 수학적 계산에서 잘못된 연산이 발생할 때 발생합니다.
int result = 10 / 0; // ArithmeticException 발생
5. IllegalArgumentException: 메서드에 잘못된 인수를 전달했을 때 발생합니다.
Thread t = new Thread();
t.setPriority(15); // IllegalArgumentException 발생 (우선순위는 1~10 사이여야 함)
6. NoSuchElementException: 입력 스트림에서 읽으려는 요소가 없을 때 발생합니다.
참고: https://tes1194.tistory.com/35
System.out.print("정수 입력: ");
int number = scanner.nextInt(); // "42" 입력
System.out.println("입력한 정수: " + number);
System.out.print("한 줄 입력: ");
String line = scanner.nextLine(); // 여전히 줄 바꿈 문자를 읽어 빈 문자열을 반환
System.out.println("입력한 줄: " + line); // 결과는 빈 문자열
7. StringIndexOutOfBoundsException: 문자열(String)의 인덱스 접근이 유효한 범위를 벗어날 때 발생합니다.
String str = "ABCD";
char ch = str.charAt(4); // 길이가 4인 문자열에서 인덱스 4는 유효하지 않음
예외 처리
- 철저한 입력 검증 및 예외 처리를 구현합니다.
- 코드의 로직을 명확히 하여 잘못된 접근을 방지합니다.
런타임 예외는 종종 디버깅을 통해 잡아야 하고, 발생 시 원인을 파악하고 수정하는 것이 중요합니다.