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 |