본문 바로가기

IT · 인터넷

[Java] ArrayIndexOutOfBoundsException: 배열 인덱스 초과 오류

반응형

Java에서 배열은 고정된 크기를 가진 데이터 구조로, 인덱스를 통해 각 요소에 접근합니다. 

그러나 배열의 인덱스가 유효 범위를 초과할 경우 ArrayIndexOutOfBoundsException이 발생합니다. 

이 오류는 런타임 시 발생하며, 인덱스 범위를 정확히 확인하지 않았음을 알리는 에러입니다.

ArrayIndexOutOfBoundsException  발생 원인

  • 인덱스 초과: 배열의 크기를 초과하는 인덱스에 접근하려 할 때 발생합니다. 
    ex) 크기가 5인 배열에 5 또는 그 이상의 인덱스를 사용하면 오류가 발생합니다.
  • 음수 인덱스 사용: 배열의 인덱스는 0부터 시작하므로, 음수 인덱스를 사용하면 예외가 발생합니다.
  • 루프에서의 오류: 배열을 반복 처리하는 루프에서 인덱스를 잘못 설정하거나, 루프 조건을 잘못 설정하여 인덱스가 범위를 초과하게 될 수 있습니다.

 

ArrayIndexOutOfBoundsException 발생 예제 코드

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        // 잘못된 인덱스 접근
        try {
            System.out.println(numbers[5]); // 이 줄에서 ArrayIndexOutOfBoundsException 발생
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException 발생: " + e.getMessage());
        }

        // 음수 인덱스 접근
        try {
            System.out.println(numbers[-1]); // 이 줄에서도 ArrayIndexOutOfBoundsException 발생
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException 발생: " + e.getMessage());
        }
    }
}

위 코드에서 첫 번째 try 블록은 배열의 크기를 초과하는 인덱스에 접근하려 하여 ArrayIndexOutOfBoundsException을 발생시키고, 두 번째 블록은 음수 인덱스에 접근하여 같은 예외를 발생시킵니다.

 

방지 및 해결 방법

#1 인덱스 범위 확인: 배열에 접근하기 전에 인덱스가 0 이상이며 배열의 크기보다 작은지 확인합니다.

 

#2 루프 조건 검토: 배열을 반복 처리할 때는 루프 조건을 신중하게 설정해야 합니다. 

예를 들어, for 루프를 사용할 때는 배열의 길이를 기준으로 조건을 설정합니다.

 

#3 배열 크기 동적 관리: Java의 ArrayList와 같은 동적 배열을 사용하면, 배열의 크기를 자동으로 관리할 수 있습니다. 

이러한 자료구조는 요소를 추가하거나 삭제할 때 인덱스를 자동으로 관리해 주므로 ArrayIndexOutOfBoundsException의 위험을 줄일 수 있습니다.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        // ArrayList는 인덱스 범위를 초과할 경우, 적절한 예외 메시지를 제공합니다.
        try {
            System.out.println(numbers.get(3)); // 인덱스 초과
        } catch (IndexOutOfBoundsException e) {
            System.out.println("IndexOutOfBoundsException 발생: " + e.getMessage());
        }
    }
}

 

#4 예외 처리 사용: 배열 접근 시 발생할 수 있는 예외를 try-catch 블록으로 감싸 예외를 처리합니다. 

이를 통해 프로그램이 비정상적으로 종료되지 않도록 할 수 있습니다.

 

 

마무리 

ArrayIndexOutOfBoundsException은 Java에서 배열을 사용할 때 자주 발생할 수 있는 오류입니다. 

이 오류를 예방하기 위해서는 인덱스 범위를 철저히 확인하고, 배열을 반복 처리할 때 루프 조건을 신중하게 설정하는 것이 중요합니다. 

반응형