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

C# 배열의 IndexOutOfRangeException 완벽 이해하기: 원인과 해결 방법

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을 효과적으로 예방할 수 있습니다.