C#의 RemoveAt 메서드는 리스트(List)에서 개발자가 지정한 인덱스 위치에 있는 요소를 제거할 때 사용합니다. 이 메서드는 System.Collections.Generic 네임스페이스의 List<T> 컬렉션뿐만 아니라 ArrayList에서도 동일하게 활용할 수 있습니다.
1. 리스트에 요소 추가하기
먼저 RemoveAt을 테스트하기 위해 문자열 리스트를 만들고 몇 가지 과목을 추가해 보겠습니다.
var subjects = new List<string>();
subjects.Add("Physics");
subjects.Add("Chemistry");
subjects.Add("Biology");
subjects.Add("Science");2. RemoveAt으로 특정 위치의 요소 제거하기
요소를 제거하려면 삭제하고 싶은 항목의 인덱스를 RemoveAt 메서드에 전달하면 됩니다. C#의 인덱스는 0부터 시작하므로, 세 번째 위치에 있는 요소를 삭제하려면 인덱스 2를 지정해야 합니다.
subjects.RemoveAt(2);
위 코드가 실행되면 리스트의 세 번째 요소인 "Biology"가 제거되고, 그 뒤에 있던 요소들이 자동으로 앞으로 당겨집니다.
3. 전체 예제 코드
지금까지의 내용을 하나의 완성된 프로그램으로 정리하면 다음과 같습니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args){
var subjects = new List<string>();
subjects.Add("Physics");
subjects.Add("Chemistry");
subjects.Add("Biology");
subjects.Add("Science");
Console.WriteLine("ELEMENTS:");
foreach (var sub in subjects) {
Console.WriteLine(sub);
}
// 세 번째 위치(인덱스 2)의 요소 제거
subjects.RemoveAt(2);
Console.WriteLine("After removing an element:");
foreach (var sub in subjects) {
Console.WriteLine(sub);
}
}
}4. 실행 결과
ELEMENTS: Physics Chemistry Biology Science After removing an element: Physics Chemistry Science
RemoveAt 사용 시 주의사항
- 인덱스 범위 확인: 존재하지 않는 인덱스를 전달하면
ArgumentOutOfRangeException이 발생합니다. 호출 전에Count속성으로 리스트 크기를 확인하는 것이 안전합니다. - 요소 자동 재정렬: 요소가 삭제되면 뒤쪽 요소들이 한 칸씩 앞으로 이동하므로, 반복문 중간에 RemoveAt을 호출할 때는 인덱스 변화에 유의해야 합니다.
- 시간 복잡도: RemoveAt은 O(n) 연산이므로 대용량 리스트에서 빈번하게 호출하면 성능에 영향을 줄 수 있습니다.
이처럼 RemoveAt은 인덱스 기반으로 간편하게 요소를 삭제할 수 있는 유용한 메서드입니다. 값 자체로 삭제하고 싶다면 Remove 메서드를, 조건에 맞는 여러 요소를 한 번에 삭제하고 싶다면 RemoveAll 메서드를 함께 활용해 보세요.