2021-01-03
오늘은 개인적으로 알고리즘 문제를 풀다가 가장 많이 접했던 예외인 ArrayIndexOutOfBoundsException의 원인과 그 해결방법을 알아보도록 하자. (아무래도 배열을 이용한 문제가 많아서 그런듯. . .)
우선 원인은 예외 이름에서도 느껴지듯이 초기에 정해진 배열의 크기보다 더 많은 양의 데이터를 넣고자 할 때 주로 발생하게 된다. 아래는 ArrayIndexOutOfBoundsException 가 발생하는 코드이다.
package eException;
public class main {
public static void main(String[] args){
int [] arr = new int[3];
for(int i = 0; i <= 3; i++) {
arr[i]= i;
//arr의 범위는 0 ~ 2 총 3개의 인덱스를 가지고 있다.
//arr[3] 은 존재하지 않기 때문에 인덱스 범위를 초과한
//ArrayIndexOutOfBoundsException가 발생한다.
}
}
}
arr의 크기는 3으로 인덱스는 0~2까지 뿐이지만 반복문을 통해 인덱스 3에 데이터를 입력하고자 하면 ArrayIndexOutOfBoundsException 가 발생하고 만다.
이와 같은 예외를 처리하기 위해 try / catch 구문을 사용해주면 된다. 우선 try에 예외가 발생할 것 같은 구간을 {...}를 이용해서 담아주고 이후 [ catch(발생할 것 같은 예외, 예외 변수명) { 예외 발생 시 실행될 코드 }; ]로 작성을 해주면 된다.
(finally의 경우 옵션 코드이기 때문에 생략해도 무방하다.)
package eException;
public class main {
public static void main(String[] args){
try {
int [] arr = new int[3];
for(int i = 0; i <= 3; i++) {
arr[i]= i;
}
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("--ArrayIndexOutOfBoundsException 발생--");
System.out.println("기존 코드를 체크해 주세요!!");
}finally {
System.out.println("예외처리 코드가 오류없이 진행되었습니다.");
}
}
}
위와 같이 try / catch 구문으로 감싸줄 경우 어디서 예외가 발생했고 어느 부분을 수정해 주면 될지 쉽게 확인할 수 있기 때문에, 코드가 조금이라도 의심 가면 해당 문법을 사용해 체크해 주는 것이 바람직하다.
(실행 시 아래와 같이 콘솔 창에 예외처리가 정상적으로 수행된 것을 확인할 수 있다.)