본문 바로가기

C#

[C#] IEnumerable을 쓰는 이유

C++에서는 std::vector, std::list처럼 구체적인 컨테이너를 주로 다루는 반면,
C#에서는 IEnumerable 같은 추상적인 인터페이스를 많이 씁니다.

 

1. 모든 컬렉션을 같은 방식으로 다룰 수 있음

void PrintAll(IEnumerable<string> items)
{
    foreach (var item in items)
        Console.WriteLine(item);
}

 

→ List, Array, HashSet 등 어떤 컬렉션이 와도 동작함!

 

2. LINQ 사용 가능 (지연 평가 포함)

var result = users.Where(u => u.Age > 18).Select(u => u.Name);
  • Where, Select 등은 모두 IEnumerable<T> 확장 메서드
  • List 같은 구체 타입이 아닌 IEnumerable만 있어도 전부 작동함

 

🎯 반대로 List가 필요한 경우

  • 인덱스로 접근할 때 (list[0])
  • .Count로 길이 체크할 때
  • Add, Remove 등 수정이 필요할 때

→ 이럴 땐 List<T>나 Array처럼 구체 타입 사용함

 

 

C++: “빠르고 구체적으로 최적화하자”

C#: “범용적이고 유연하게 추상화하자”

→ 그래서 C#에서는 구체적인 List<T>보다 인터페이스 IEnumerable<T>를 우선 사용하는 것이 관례입니다.

'C#' 카테고리의 다른 글

[C#] 구조체를 쓰는 이유  (1) 2025.08.10
[C#] Boxing과 UnBoxing  (3) 2025.07.25
[C#] Garbage Collector  (2) 2025.07.25
[C#] LINQ와 Lazy Evaluation(지연 평가)  (2) 2025.07.25
[C#] delegate vs Action  (1) 2025.06.16