JAVA
[JAVA] IndexOutOfBoundsException 에러 해결
개발자 leelee
2024. 1. 18. 23:04
상황
//문제의 코드
myList = Hanlder.selectDetailList(conn, tcBp, logger); // 리스트 가져옴
maxSrno = Hanlder.maxSrno(conn, tcBp, logger); // 시리얼 넘버 최대값 가져옴
Bean lastResultBp = new Bean();
/* java.lang.IndexOutOfBoundsException 원인
if (maxSrno > 0) {
lastResultBp = (Bean) myList.get(maxSrno - 1);
}
*/
리스트로 받아오지 않게 항목을 하나 변경했더니 IndexOutOfBoundsException 에러가 났다.
원인
IndexOutOfBoundsException 에러는 배열이나 리스트에서 유효하지 않은 인덱스로의 접근 시 발생하는 예외다.
리스트에서 get(index) 했을 때 값이 없으면 생기는 오류다.
List<String> myList = new ArrayList<>();
myList.add("Element 1");
myList.add("Element 2");
// 1. 음수 인덱스에 접근
String element = myList.get(-1); // IndexOutOfBoundsException 발생
// 2. 자료 구조의 크기를 벗어나는 인덱스에 접근
String element = myList.get(2); // IndexOutOfBoundsException 발생
// 3. 빈 자료 구조에서의 접근 시도
List<String> emptyList = new ArrayList<>();
String element = emptyList.get(0); // IndexOutOfBoundsException 발생
해결방법
1. 인덱스 범위를 확인한다.
if (index >= 0 && index < myList.size()) {
// 올바른 범위 내의 인덱스에 접근
String element = myList.get(index);
} else {
// 처리할 로직 추가 (예: 에러 핸들링)
}
2. 비어있는 값인지 먼저 확인한다.
if (!myList.isEmpty()) {
// 자료 구조가 비어 있지 않은 경우에만 접근
String element = myList.get(0);
} else {
// 처리할 로직 추가 (예: 에러 핸들링)
}
나의 경우는 안 쓰는 값이라 주석처리 해주었다.
끝.