반응형
1. ❓ ArrayIndexOutOfBoundsException이란 무엇인가요?
이 예외는 배열의 범위를 벗어난 인덱스(Index)에 접근하려고 할 때 발생하는 언체크드 예외(Unchecked Exception)입니다.
자바의 배열은 고정된 크기를 가지며, 인덱스는 항상 **0부터 (배열 길이 - 1)**까지입니다. 만약 크기가 5인 배열에서 5번째 인덱스(실제로는 6번째 요소)를 찾으려고 하면, JVM은 "그곳엔 아무것도 없어!"라며 이 예외를 던집니다.
2. 🔍 왜 발생하나요? (주요 실수 사례)
✅ 1. '작다(<)' 대신 '작거나 같다(<=)' 사용
가장 전형적인 실수입니다. 배열의 길이를 조건으로 사용할 때 인덱스 범위를 초과하게 됩니다.
Java
int[] numbers = {10, 20, 30}; // 길이: 3, 유효 인덱스: 0, 1, 2
for (int i = 0; i <= numbers.length; i++) { // i가 3이 되는 순간 에러!
System.out.println(numbers[i]);
}
✅ 2. 빈 배열에 접근
데이터가 하나도 없는 배열의 0번 인덱스를 참조하려고 할 때 발생합니다.
Java
List<String> list = new ArrayList<>();
String item = list.get(0); // 요소가 없으므로 에러!
✅ 3. 음수 인덱스 사용
프로그래밍 실수로 인덱스 값이 계산 도중 -1 등으로 변했을 때 발생합니다.
3. 🛡️ 예외를 방지하는 실전 팁
1️⃣ 향상된 for 문(Enhanced for-loop) 사용
인덱스를 직접 다루지 않기 때문에 범위를 벗어날 위험이 아예 사라집니다. 가장 추천하는 방식입니다.
Java
for (int num : numbers) {
System.out.println(num);
}
2️⃣ 배열 길이(length) 항상 체크
인덱스를 계산해서 써야 한다면, 조건문에서 반드시 길이를 먼저 확인하세요.
Java
if (index >= 0 && index < numbers.length) {
System.out.println(numbers[index]);
}
3️⃣ 스트림(Stream) API 활용
자바 8 이상이라면 스트림을 사용해 가독성과 안전성을 동시에 챙길 수 있습니다.
💡 시니어의 조언: 'Off-by-one' 오류를 경계하세요
인덱스가 1만큼 차이 나서 발생하는 이 오류는 프로그래밍의 고전적인 문제입니다. 이를 방지하려면 배열의 시작은 0이고 끝은 length-1이라는 사실을 항상 머릿속에 새겨두어야 합니다.
특히 알고리즘 문제를 풀 때나 복잡한 행렬을 다룰 때는 numbers.length를 변수에 담아두고 경계 조건을 명확히 설정하는 습관이 디버깅 시간을 획기적으로 줄여줍니다.
반응형
'개발 > Trouble Shooting' 카테고리의 다른 글
| 맞지 않는 옷을 입히지 마세요: ClassCastException 완벽 가이드 (0) | 2025.12.29 |
|---|---|
| 0으로 나눌 수 없습니다! ArithmeticException 완벽 가이드 (0) | 2025.12.29 |
| 자바의 영원한 숙제: NullPointerException (NPE) 완벽 가이드 (0) | 2025.12.29 |
| 클래스가 어디로 사라졌을까? ClassNotFoundException 완벽 가이드 (0) | 2025.12.29 |
| 데이터베이스와의 소통 불능: SQLException 완벽 가이드 (0) | 2025.12.29 |