예제 11-3에서도 이전까지의 최솟값, 최댓값을 가지고 있는 튜플의 요소를 각각 수정했기 때문에 코드가 엄청나게 달라 보이지는 않는다. 좀 더 의미 있는 예로 피보나치 수열2의 시퀀스를 IEnumerable<int> 타입으로 반환하는 메서드의 예를 살펴보자. 대단한 것처럼 보이지는 않지만, C#의 yield라는 키워드를 활용하면 손쉽게 코드를 개발할 수 있다. 다음 예는 C# 6에서도 수행할 수 있다.

    예제 11-5 튜플을 사용하지 않고 구현한 피보나치 수열 ▶ FibonacciWithoutTuples.cs

    static IEnumerable<int> Fibonacci()
    {
        int current = 0;
        int next = 1;
        while (true)
        {
            yield return current;
            int nextNext = current + next;
            current = next;
            next = nextNext;
        }
    }

    피보나치 수열을 계산하려면 current(현재 값)와 next(다음 값)를 계속 저장하고 있어야 하며, 매 반복마다 current 값을 next 값으로, next 값을 nextNext(next의 그다음 값) 값으로 변경해야 한다. 이를 위해서는 또 하나의 임시 변수가 필요한데, current 값에 next 값을 할당해 버리면 현재의 current 값을 잃어 버리기 때문이다.

     

     


    2 0, 1로 시작하고, 그다음 수는 수열의 앞쪽 두 수를 합한 형태로 계산되는 수열

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