본문으로 바로가기

   

 

이번 글에서는 java.lang.ArrayIndexOutOfBoundsException 에러 해결 방법에 대하여 알아보겠습니다.

 

배열의 크기를 n이라고 했을 때 배열의 인덱스는 1부터 n까지가 아닌 0부터 n-1까지입니다. 

프로그래밍 중 ArrayIndexOutOfBoundsException이 가장 많이 발생하는 이유중 하나죠.

C/C++과 달리 자바는 인덱스가 배열의 크기보다 크거나 음수 인덱스에 대한 요청이 있으면 자바는 위의 예외를 발생시킵니다.

또한 이 예외는 자바 컴파일러는 검사하지않고 항상 런타임(실행도중)에 예외를 발생시킵니다.

 


예제를 통하여 에러가 발생한 이유와 해결 방법에 대하여 알아보도록 하겠습니다.

아래의 코드는 arr의 5번째 요소를 출력하는 예제입니다.

    public static void main(String[] args) {
        int arr[] = {0, 1, 2, 3, 4};
        System.out.print(arr[5]);
    }

 

출력 결과

 

arr이란 배열의 크기는 5입니다. 따라서 인덱스는 0부터 4(n-1)까지입니다.

하지만 배열의 5번째 인덱스에 접근하려고 시도했기 때문에 자바는 해당 예외를 throw한 것입니다.

 


두 번째 Exception 발생의 예입니다.

아래 코드는 list의 2번째 요소를 가져오는 예제입니다.

        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");

        System.out.print(list.get(2));

 

출력 결과

 

위 코드를 보시면 list 객체를 생성하고 2번 add해주었습니다. (list의 크기 = 2)

list의 크기가 2이므로 접근 가능한 인덱스는 0부터 1(2-1)까지입니다.

따라서 list의 2번째 인덱스에 접근하려고 했기 때문에 해당 예외를 throw한 것입니다.

 


그렇다면 어떤식으로 이런 예외에 대해 올바르게 예외처리를 수행할 수 있을까요?

 

올바른 배열 사용법

- 반복문에서 다음과 같이 사용합니다.

for(int i=0; i<arr.legth; i++) { ... }

 

- 또한, foreach문을 사용할 수 있습니다.

for(int i : arr) {...}