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

C#에서 ArrayList의 지정된 인덱스에 요소 삽입하는 방법

C#에서 ArrayList의 지정된 인덱스 위치에 새 요소를 삽입하려면 Insert() 메서드를 사용합니다. 이 메서드는 해당 위치에 요소를 추가하고, 그 위치 이후에 있던 기존 요소들을 자동으로 한 칸씩 뒤로 이동시킵니다.

Insert 메서드 기본 문법

public virtual void Insert(int index, object value);
  • index: 요소를 삽입할 위치(0부터 시작하는 인덱스)
  • value: 삽입할 값(Object 타입이므로 어떤 형식이든 저장 가능)

index는 0보다 크거나 같고 ArrayList의 Count보다 작거나 같아야 하며, 범위를 벗어나면 ArgumentOutOfRangeException이 발생합니다.

예제 1: 문자열 요소 삽입하기

다음은 ArrayList에 문자열 요소들을 추가한 뒤, 인덱스 4 위치에 새 요소를 삽입하는 예제입니다.

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      ArrayList list = new ArrayList();
      list.Add("One");
      list.Add("Two");
      list.Add("Three");
      list.Add("Four");
      list.Add("Five");
      list.Add("Six");
      list.Add("Seven");
      list.Add("Eight");

      Console.WriteLine("ArrayList 요소 출력...");
      foreach(string str in list) {
         Console.WriteLine(str);
      }
      Console.WriteLine("ArrayList는 읽기 전용인가요? = " + list.IsReadOnly);
      Console.WriteLine("ArrayList에 Six가 있나요? = " + list.Contains("Six"));

      // 인덱스 4 위치에 "Twelve" 삽입
      list.Insert(4, "Twelve");

      Console.WriteLine("ArrayList 요소 출력... 업데이트 후");
      foreach(string str in list) {
         Console.WriteLine(str);
      }
   }
}

실행 결과

ArrayList 요소 출력...
One
Two
Three
Four
Five
Six
Seven
Eight
ArrayList는 읽기 전용인가요? = False
ArrayList에 Six가 있나요? = True
ArrayList 요소 출력... 업데이트 후
One
Two
Three
Four
Twelve
Five
Six
Seven
Eight

실행 결과를 보면 list.Insert(4, "Twelve") 호출 후 인덱스 4에 "Twelve"가 들어가고, 원래 그 자리에 있던 "Five"부터 이후 요소들이 한 칸씩 뒤로 밀려난 것을 확인할 수 있습니다. 또한 IsReadOnly 속성으로 컬렉션의 읽기 전용 여부를, Contains() 메서드로 특정 요소의 존재 여부를 손쉽게 확인할 수 있습니다.

예제 2: 숫자 요소 삽입과 IEnumerator 활용

이번에는 정수형 데이터를 다루고, GetEnumerator() 메서드로 가져온 IEnumerator를 사용해 요소를 하나씩 순회하는 예제입니다.

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      ArrayList arrList = new ArrayList();
      arrList.Add(100);
      arrList.Add(200);
      arrList.Add(300);
      arrList.Add(400);
      arrList.Add(500);

      Console.WriteLine("요소 출력...");
      IEnumerator demoEnum = arrList.GetEnumerator();
      while(demoEnum.MoveNext()) {
         Object ob = demoEnum.Current;
         Console.WriteLine(ob);
      }

      // 인덱스 4 위치에 1000 삽입
      arrList.Insert(4, 1000);

      Console.WriteLine("요소 출력... 업데이트 후");
      demoEnum = arrList.GetEnumerator();
      while(demoEnum.MoveNext()) {
         Object ob = demoEnum.Current;
         Console.WriteLine(ob);
      }
   }
}

실행 결과

요소 출력...
100
200
300
400
500
요소 출력... 업데이트 후
100
200
300
400
1000
500

삽입 후 마지막 요소였던 500이 인덱스 5로 이동하고, 그 앞에 1000이 새롭게 추가된 것을 볼 수 있습니다. MoveNext()로 다음 요소로 이동하고 Current로 현재 값을 읽는 방식은 ArrayList뿐 아니라 다른 .NET 컬렉션에서도 동일하게 사용되는 표준적인 순회 패턴입니다.

알아두면 좋은 점

  • 박싱(Boxing): ArrayList는 Object 기반의 비제네릭 컬렉션이므로 int 같은 값 형식을 저장할 때 박싱이 발생하여 성능 저하가 있을 수 있습니다.
  • 권장 대안: 최신 C#에서는 형식 안전성이 보장되는 제네릭 컬렉션 List<T> 사용이 권장됩니다.
  • 예외 처리: 인덱스가 음수이거나 Count보다 크면 ArgumentOutOfRangeException이 발생하므로 삽입 전에 인덱스 범위를 검증하는 것이 안전합니다.