[29] 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

메서드에서 단일의 객체를 반환하기 보다 시퀀스를 반환하는 일이 종종 있다.

이 때 컬렉션을 반환하기 보다 이터레이터를 반환하는 것이 좋다.

 

중요한 점은 이터레이터는 실제 시퀀스가 아니라, 

시퀀스를 생성하는 방법을 알고 있는 객체를 생성한다는 것이다.

 

다음의 코드는 int 타입으로 표현가능한 양의 정수의 시퀀스를 생성한다.

var allNumbers = Enumerable.Range(0, int.MaxValue);

이 시점에서는 실제로 시퀀스가 생성된 것이 아니다!

때문에 일부만 꺼내 사용한다면 방대한 크기의 시퀀스를 저장할 메모리가 필요치 않다.

 

사용자의 선택으로 넘기자

IEnumerable<T>를 반환한다면 필요할 때마다 하나씩 항목을 생성할 수도 있으며,

ToList()나 ToArray()를 이용하여 전체 시퀀스를 생성하는 것도 가능하다.

 

결론

 - 지금까지는 LINQ를 사용할때 무조건 ToList()를 해서 넘기곤 했는데,

   IEnumerable도 고려해봐야할 듯 하다.

 

 

댓글

Designed by JB FACTORY