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

C# IndexOutOfRangeException 예외 완벽 이해하기 – 원인과 해결 방법

IndexOutOfRangeException이란?

C#에서 IndexOutOfRangeException은 배열의 인덱스가 유효 범위를 벗어났을 때 발생하는 런타임 예외입니다. 배열의 인덱스는 0부터 시작하므로, 크기가 5인 배열의 유효한 인덱스는 0부터 4까지입니다. 이 범위를 넘어서는 인덱스에 접근하면 프로그램이 비정상 종료됩니다.

간단한 예시

다음은 크기가 5인 정수형 배열을 선언하고 각 요소에 값을 할당하는 코드입니다.

int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

이 상태에서 배열의 크기를 초과하는 위치, 즉 여섯 번째 요소에 값을 추가하려고 하면 어떻게 될까요?

arr[5] = 60;

위 코드는 존재하지 않는 여섯 번째 위치(인덱스 5)에 접근하려 하기 때문에 IndexOutOfRangeException이 발생합니다.

전체 예제 코드

using System;
using System.IO;
using System.Collections.Generic;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            int[] arr = new int[5];
            arr[0] = 10;
            arr[1] = 20;
            arr[2] = 30;
            arr[3] = 40;
            arr[4] = 50;
            arr[5] = 60; // 이 줄에서 오류 발생
        }
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 예외 메시지가 출력되며 프로그램이 중단됩니다.

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

예외를 방지하는 방법

이러한 런타임 오류를 예방하려면 아래 사항을 습관화하는 것이 좋습니다.

  • 배열에 접근하기 전에 인덱스가 0 이상, 배열.Length - 1 이하인지 항상 확인합니다.
  • for 반복문 작성 시 조건식을 i < arr.Length로 설정하면 경계 초과를 막을 수 있습니다.
  • 단순히 모든 요소를 순회할 때는 인덱스를 직접 다루지 않는 foreach 문을 사용하는 것이 더 안전합니다.
for (int i = 0; i < arr.Length; i++) {
    Console.WriteLine(arr[i]);
}

이처럼 배열의 크기와 인덱스 범위를 항상 염두에 두면 IndexOutOfRangeException을 효과적으로 예방할 수 있습니다.