IEnumerable은 GetEnumerator() 메서드 하나만을 정의하는 인터페이스로, 이 메서드는 IEnumerator 인터페이스를 반환합니다. IEnumerable은 열거(순회)할 수 있는 모든 컬렉션의 기본이 되는 인터페이스입니다.
IEnumerable은 컬렉션에 대한 읽기 전용 접근을 제공하며, 해당 인터페이스를 구현한 컬렉션은 foreach 문으로 손쉽게 순회할 수 있습니다.
반면 List<T> 클래스는 인덱스를 통해 요소에 접근할 수 있는 객체 목록을 나타내며, System.Collections.Generic 네임스페이스에 속해 있습니다.
List 클래스는 정수, 문자열 등 다양한 타입의 컬렉션을 생성할 수 있고, 검색·정렬·조작을 위한 다양한 메서드도 함께 제공합니다.
IEnumerable을 List로 변환하기
IEnumerable을 List로 변환하는 가장 간단한 방법은 LINQ의 ToList() 메서드를 사용하는 것입니다. 아래 예제에서는 Enumerable.Range()로 생성한 IEnumerable의 요소를 List에 담아 출력합니다.
예제 1
static void Main(string[] args) {
List<int> list = new List<int>();
IEnumerable<int> enumerable = Enumerable.Range(1, 5);
foreach (var item in enumerable) {
list.Add(item);
}
foreach (var item in list) {
Console.WriteLine(item);
}
Console.ReadLine();
}출력 결과
1 2 3 4 5
List를 IEnumerable로 변환하기
List를 다시 IEnumerable로 변환하려면 AsEnumerable() 메서드를 사용하면 됩니다. 이 메서드는 List 자체를 새로 복사하지 않고, IEnumerable 타입의 참조로만 바꿔주므로 매우 효율적입니다.
예제 2
static void Main(string[] args) {
List<int> list = new List<int>();
IEnumerable<int> enumerable = Enumerable.Range(1, 5);
foreach (var item in enumerable) {
list.Add(item);
}
foreach (var item in list) {
Console.WriteLine(item);
}
// List를 IEnumerable로 변환
IEnumerable<int> enumerableAfterConversion = list.AsEnumerable();
foreach (var item in enumerableAfterConversion) {
Console.WriteLine(item);
}
Console.ReadLine();
}출력 결과
1 2 3 4 5 1 2 3 4 5
정리
- IEnumerable → List:
ToList()메서드 또는 foreach로 요소를 하나씩 추가하는 방식을 사용합니다. - List → IEnumerable:
AsEnumerable()메서드를 사용하며, 데이터 복사 없이 참조만 변경되므로 성능 부담이 거의 없습니다. - List는 인덱스 접근과 수정이 필요할 때, IEnumerable은 읽기 전용 순회가 필요할 때 적합합니다.