Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 ArrayIndexOutOfBoundsException이란? 원인과 발생 과정 총정리

배열(Array)이란?

배열은 동일한 타입의 요소들을 고정된 크기로 순차적으로 저장하는 데이터 구조(컨테이너/객체)입니다. 배열의 크기(길이)는 생성 시점에 결정되며, 이후에는 변경할 수 없습니다.

인덱스(Index)의 개념

배열 내에서 요소의 위치를 인덱스(index) 또는 첨자(subscript)라고 부릅니다. 자바에서 배열의 첫 번째 요소는 인덱스 0에 저장되고, 두 번째 요소는 인덱스 1에 저장되는 식으로 순차적으로 배치됩니다.

자바 ArrayIndexOutOfBoundsException이란? 원인과 발생 과정 총정리

배열 요소에 접근하는 방법

배열의 각 요소는 배열 이름 뒤에 대괄호([]) 안에 원하는 요소의 인덱스를 지정하는 표현식을 통해 접근할 수 있습니다.

System.out.println(myArray[3]);
// 1457 출력

유효한 인덱스 범위

일반적으로 배열은 고정된 크기를 가지며, 각 요소는 인덱스를 통해 접근합니다. 예를 들어 크기가 7인 배열을 생성했다면, 이 배열의 요소에 접근할 수 있는 유효한 표현식은 a[0]부터 a[6]까지, 즉 0부터 (배열 길이 - 1)까지입니다.

만약 음수 값이나 배열 크기보다 크거나 같은 값을 인덱스로 사용하면 ArrayIndexOutOfBoundsException(배열 인덱스 범위 초과 예외)이 발생합니다.

예제 코드

다음 예제를 실행하면 배열의 모든 요소가 화면에 출력되고, 사용자에게 선택하고 싶은 요소의 인덱스를 입력받습니다. 배열의 크기가 7이므로 유효한 인덱스는 0부터 6까지입니다.

import java.util.Arrays;
import java.util.Scanner;
public class AIOBSample {
    public static void main(String args[]){
        int[] myArray = {1254, 1458, 5687,1457, 4554, 5445, 7524};
        System.out.println("Elements in the array are: ");
        System.out.println(Arrays.toString(myArray));
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the index of the required element: ");
        int element = sc.nextInt();
        System.out.println("Element in the given index is :: "+myArray[element]);
    }
}

예외 발생 상황

아래 실행 결과를 보면 사용자가 인덱스 7을 입력했습니다. 그러나 배열의 크기가 7이므로 유효한 인덱스는 0~6까지이며, 7은 범위를 벗어난 잘못된 인덱스입니다. 따라서 ArrayIndexOutOfBoundsException이 발생하면서 프로그램 실행이 비정상적으로 종료됩니다.

실행 결과 (런타임 예외)

Elements in the array are:
[1254, 1458, 5687, 1457, 4554, 5445, 7524]
Enter the index of the required element:
7
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at AIOBSample.main(AIOBSample.java:12)

예외를 방지하는 팁

이러한 예외를 피하려면 항상 인덱스가 0 이상이고 배열 길이 - 1 이하인지 확인해야 합니다. 특히 반복문을 사용할 때는 조건식을 i <= arr.length가 아닌 i < arr.length로 작성하는 것이 안전하며, 사용자 입력값을 처리하는 경우에는 접근 전에 범위 검증 로직을 추가하는 것이 좋습니다.