C# IndexOutOfRangeException이란?
Java에서는 ArrayIndexOutOfBoundsException이라는 예외가 사용되지만, C#에서 이에 해당하는 예외는 바로 IndexOutOfRangeException입니다.
IndexOutOfRangeException은 배열의 인덱스가 유효 범위를 벗어났을 때 발생하는 런타임 예외입니다. 예를 들어 크기가 3인 배열의 유효한 인덱스는 0, 1, 2뿐이므로, 인덱스 3 이상에 접근하려고 하면 이 예외가 던져집니다.
예제 코드
다음 예제는 크기가 3인 정수형 배열을 선언하고, 존재하지 않는 인덱스 4에 접근하여 예외를 발생시키는 상황을 보여줍니다.
using System;
using System.IO;
using System.Collections.Generic;
namespace Demo {
class Program {
static void Main(string[] args) {
int[] arr = new int[3];
arr[0] = 5;
arr[1] = 7;
arr[2] = 8;
arr[4] = 24; // 인덱스 범위 초과로 오류 발생
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 오류 메시지가 출력됩니다.
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
IndexOutOfRangeException 예방 방법
이러한 예외를 방지하려면 다음과 같은 방법을 활용할 수 있습니다.
- 배열 길이 확인하기: 인덱스에 접근하기 전에
arr.Length를 통해 유효 범위(0 ~ Length-1) 내에 있는지 검사합니다. - foreach 문 사용하기: 인덱스를 직접 다루지 않고 배열 전체를 순회할 때는
foreach문을 사용하면 안전합니다. - 경계 조건 주의하기: 반복문에서
<=대신<연산자를 사용해 마지막 인덱스를 초과하지 않도록 주의합니다.
// 안전한 접근 예시
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i]);
}이처럼 배열의 크기를 항상 염두에 두고 인덱스에 접근하면 IndexOutOfRangeException을 효과적으로 예방할 수 있습니다.