다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
메서드에서 단일의 객체를 반환하기 보다 시퀀스를 반환하는 일이 종종 있다.
이 때 컬렉션을 반환하기 보다 이터레이터를 반환하는 것이 좋다.
중요한 점은 이터레이터는 실제 시퀀스가 아니라,
시퀀스를 생성하는 방법을 알고 있는 객체를 생성한다는 것이다.
다음의 코드는 int 타입으로 표현가능한 양의 정수의 시퀀스를 생성한다.
var allNumbers = Enumerable.Range(0, int.MaxValue);
이 시점에서는 실제로 시퀀스가 생성된 것이 아니다!
때문에 일부만 꺼내 사용한다면 방대한 크기의 시퀀스를 저장할 메모리가 필요치 않다.
사용자의 선택으로 넘기자
IEnumerable<T>를 반환한다면 필요할 때마다 하나씩 항목을 생성할 수도 있으며,
ToList()나 ToArray()를 이용하여 전체 시퀀스를 생성하는 것도 가능하다.
결론
- 지금까지는 LINQ를 사용할때 무조건 ToList()를 해서 넘기곤 했는데,
IEnumerable도 고려해봐야할 듯 하다.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[31] 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라 (0) | 2021.04.30 |
---|---|
[30] 루프보다 쿼리 구문이 낫다 (0) | 2021.04.28 |
[28] 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라 (0) | 2021.04.28 |
[27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라 (0) | 2021.04.28 |
[26] 제네릭 인터페이스와 논제네릭 인터페이스를 함께 구현하라 (0) | 2021.04.28 |