개발을 하다보면 이런 에러를 마주할 때가 있을 것입니다.
java.lang.ArrayIndexOutOfBoundsException
오류를 잡는 법은 에러 아래 줄을 따라 해당 소스의 라인을 찾아가면 되는데 근본적인 원인은 배열 인덱스와 관련이 있습니다. 쉽게 말해 프로그램이 배열 인덱스보다 큰 요소에 접근하게 될 때 이런 오류가 발생합니다.
예를 들어 배열을 박스라고 생각해보겠습니다. 이 박스의 공간은 세 개라고 정의합니다.
이 각각의 공간은 배열의 요소라고 불립니다. 이처럼 공간이 정의된 배열을 생성하면 배열의 요소는 기본값을 갖습니다.(int는 0, String은 null)
배열의 인덱스는 배열의 요소를 구분하는 일련번호라고 생각하면 됩니다.
※배열의 인덱스는 0부터 시작합니다.
이제 그럼 박스 안에 세 개의 공을 넣으려 합니다.
배열의 길이는 배열의 인덱스와 달리 1부터 계산됩니다.
즉 박스의 인덱스는 2까지이지만 박스의 길이는 3입니다.
public class ArrayTest{
public static void main(String args[]) {
String[] box = new String[3];
box[0] = "빨간공";
box[1] = "초록공";
box[2] = "파란공";
System.out.println("박스 공간 : " +box.length);
for(int i=0; i<box.length; i++){
System.out.println("["+i+"]번 공간 : " +box[i]);
}
}
}
세 개의 다른 공들이 정상으로 들어간 것을 확인할 수 있습니다.
그럼 에러가 나는 상황을 만들어보겠습니다.
이미 박스 안에는 세 개의 공이 들어있는 상황, 검은공을 넣어보겠습니다.
public class ArrayTest{
public static void main(String args[]) {
String[] box = new String[3];
box[0] = "빨간공";
box[1] = "초록공";
box[2] = "파란공";
System.out.println("박스 공간 : " +box.length);
for(int i=0; i<box.length; i++){
System.out.println("["+i+"]번 공간 : " +box[i]);
}
box[3] = "검은공";
}
}
예상한대로 에러가 발생합니다. (java.lang.ArrayIndexOutOfBoundsException: 3)
그리고 어디서 에러가 났는지 아래 라인을 통해 확인할 수 있습니다. (ArrayTest.java:15)
정의된 박스의 인덱스는 0부터 2까지였습니다. 하지만 box[3]은 배열의 인덱스를 벗어났고 에러가 발생한 것입니다. 기억해두면 에러를 피할 수 있을 것입니다.
+ 피드백은 언제나 환영입니다 :)