[33] 필요한 시점에 필요한 요소를 생성하라

다음 본문은 도서 이펙티브 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);

 

결론

 - 반복적으로 이터레이터의 특성을 설명하는 챕터.

 

 

댓글

Designed by JB FACTORY