Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 IndexOutOfRangeException(범위를 벗어난 인덱스 예외) 처리하는 방법

IndexOutOfRangeException은 배열의 경계를 벗어난 인덱스로 요소에 접근하려고 할 때 발생하는 예외입니다. C#에서 배열은 0부터 시작하며, 선언된 크기를 초과하는 인덱스에 접근하면 런타임 오류가 발생합니다.

IndexOutOfRangeException이 발생하는 이유

예를 들어 다음과 같이 요소가 5개인 배열이 있다고 가정해 보겠습니다.

int[] n = new int[5] {66, 33, 56, 23, 81};

이 배열의 유효한 인덱스는 0부터 4까지입니다. 그런데 반복문에서 인덱스 5 이상의 값으로 접근하려고 하면 IndexOutOfRangeException이 발생합니다.

for (j = 0; j < 10; j++) {
    Console.WriteLine("Element[{0}] = {1}", j, n[j]);
}

위 코드는 배열 크기보다 큰 인덱스 5~9까지 접근을 시도하기 때문에 다음과 같은 오류가 발생합니다.

System.IndexOutOfRangeException: Index was outside the bounds of the array.

try-catch로 예외 처리하기

이러한 예외는 try-catch 블록을 사용하여 안전하게 처리할 수 있습니다. 예외가 발생해도 프로그램이 비정상 종료되지 않도록 catch 블록에서 적절히 대응하는 것이 좋습니다.

전체 예제 코드

using System;

namespace Demo {
    class MyArray {
        static void Main(string[] args) {
            try {
                int[] n = new int[5] {66, 33, 56, 23, 81};
                int i, j;
                // 예외 발생: IndexOutOfRangeException
                for (j = 0; j < 10; j++) {
                    Console.WriteLine("Element[{0}] = {1}", j, n[j]);
                }
                Console.ReadKey();
            } catch (System.IndexOutOfRangeException e) {
                Console.WriteLine(e);
            }
        }
    }
}

실행 결과

Element[0] = 66
Element[1] = 33
Element[2] = 56
Element[3] = 23
Element[4] = 81
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Demo.MyArray.Main (System.String[] args) [0x00019] in <6ff1dbe1755b407391fe21dec35d62bd>:0

실행 결과를 보면 배열의 요소 5개(인덱스 0~4)는 정상적으로 출력되지만, 인덱스 5에 접근하는 순간 예외가 발생하고 catch 블록에서 해당 오류 메시지를 출력합니다.

정리

배열의 크기보다 크거나 음수인 인덱스에 접근하면 다음과 같은 오류가 생성됩니다.

System.IndexOutOfRangeException - Index was outside the bounds of the array.

이러한 예외를 방지하는 가장 좋은 방법은 반복문에서 array.Length를 활용해 배열의 실제 크기만큼만 순회하는 것입니다. 또한 try-catch 블록으로 예외를 처리하면 예기치 않은 상황에서도 프로그램의 안정성을 유지할 수 있습니다.