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

C#에서 IEnumerable을 List로 변환하고 List를 다시 IEnumerable로 변환하는 방법

IEnumerableGetEnumerator() 메서드 하나만을 정의하는 인터페이스로, 이 메서드는 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은 읽기 전용 순회가 필요할 때 적합합니다.