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는 유효하지 않음

 

 

 

예외 처리

  • 철저한 입력 검증 및 예외 처리를 구현합니다.
  • 코드의 로직을 명확히 하여 잘못된 접근을 방지합니다.

런타임 예외는 종종 디버깅을 통해 잡아야 하고, 발생 시 원인을 파악하고 수정하는 것이 중요합니다.