다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
이터레이터 메서드에 반드시 입력 시퀀스가 필요한 건 아니다.
새로운 컬렉션을 생성하는 팩토리메서드로서 사용할 수도 있다.
일반 메서드로는 다음과 같이 구현해볼 수 있다.
하지만 이 경우 우선 생성한 뒤에 다른 작업들을 할 수 있기 때문에,
사용하지 않는 숫자까지 전부 생성하게될 여지가 있다.
static IList<int> CreateSequence(int numberOfElements, int startAt, int stepBy)
{
var collection = new List<int>(numberOfElements);
for(int i = 0; i < numberOfElements; i++)
collection.Add(startAt + i * stepBy);
return collection;
}
다음은 이터레이트 메서드로 숫자 시퀀스를 생성하는 예이다.
public static IEnumerable<int> CreateSequence(int numberOfElements, int startAt, int stepBy)
{
for (int i = 0; i < numberOfElements; i++)
yield return startAt + i * stepBy;
}
위 코드를 실행하면 개별 요소가 요청 시마다 하나씩 생성된다.
때문에 호출 측에서 리스트에 대한 생성을 멈출 수 있기 때문에 사용하지 않는 요소는 생성하지 않아도 된다.
var sequence = CreateSequence(100, 0, 5).TakeWhile((n) => n < 50);
결론
- 반복적으로 이터레이터의 특성을 설명하는 챕터.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[35] 확장 메서드는 절대 오버로드하지 마라 (0) | 2021.04.30 |
---|---|
[34] 함수를 매개변수로 사용하여 결합도를 낮추라 (0) | 2021.04.30 |
[32] Action, Predicate, Function과 순회 방식을 분리하라 (0) | 2021.04.30 |
[31] 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라 (0) | 2021.04.30 |
[30] 루프보다 쿼리 구문이 낫다 (0) | 2021.04.28 |