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이 발생하므로 삽입 전에 인덱스 범위를 검증하는 것이 안전합니다.