더북(TheBook)

예제 11-7 일반화된 메서드를 이용하여 피보나치 수열 생성 ▶ FibonacciWithGenerator.cs

static IEnumerable<TResult>
    GenerateSequence<TState, TResult>(
        TState seed,
        Func<TState, TState> generator,
        Func<TState, TResult> resultSelector)
{
    var state = seed;
    while (true)
    {
        yield return resultSelector(state);
        state = generator(state);
    }
}
// 사용 예
var fibonacci = GenerateSequence(
    (current: 0, next: 1),
    pair => (pair.next, pair.current + pair.next),
    pair => pair.current);

 


➊ 이전 값을 이용하여 새로운 값을 생성하는 시퀀스 생성기 메서드
➋ 시퀀스 생성기를 이용하여 피보나치 수열을 생성

익명 타입이나 일반적인 타입을 이용하더라도 동일한 작업을 수행할 수는 있지만, 이처럼 멋진 코드를 만들기는 어려울 것이다. 다른 프로그래밍 언어에 대한 경험이 있는 독자라면 별로 감명받지 않겠지만, C#에서도 이처럼 아름다운 코드를 작성할 수 있다는 점에서는 충분히 흥미로울 것이라 생각한다.

이제 튜플의 기본적인 동작 방식을 살펴봤으니 좀 더 깊이 있는 내용을 살펴보자. 다음 절에서는 주로 변환과 관련된 내용을 다루지만, 튜플 요소의 이름이 중요한 경우와 그렇지 않은 경우도 함께 살펴볼 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.