[Effective C#] 아이템 33: 필요한 시점에 필요한 요소를 생성하라
C# 카테고리의 다른 글
yield return을 사용해서 시퀀스를 생성하면 사용되지 않을 요소를 미리 생성하는 것을 피할 수 있다.
다음 예시 코드는 정수값 시퀀스를 생성하는 메서드이다.
static IList<int> CreateSequence(int numberOfElements, int startAt, int stepBy)
{
var collection = new List<int>(numberOfElement);
for (int i = 0; i < numberOfElements; i++)
collection.Add(startAt + i * stepBy);
return collection;
}
위 코드는 항상 numberOfElements 개의 요소를 생성한다.
이를 중간에 멈출 방법은 없다.
다음과 같이 yield return을 사용하면 요소를 필요할 때에 생성한다.
static IEnumerable<int> CreateSequence(int numberOfElements, int startAt, int stepBy)
{
for (var i = 0; i < numberOfElements; i++)
yield return startAt + i * stepBy;
}
위의 코드는 각 요소가 필요할 때에만 생성된다.
따라서 중간에 멈추는 것도 가능하다.
// 요소가 1000보다 같거나 커지면 요소 생성이 멈춤
var sequence = CreateSequnece(10000, 0, 7).
TakeWhile((num) => num < 1000);
이처럼 필요한 시점에 요소를 생성하도록 하면 불필요한 비용을 줄일 수 있다.
댓글남기기