yield이란 무엇이며 C#에서 어떻게 작동합니까? | Nikita Lipiliin

yield의 A-Z 글입니다. 이 글에서도 나왔지만 yield를 잘 활용한 예가 피보나치 수열입니다.

void PrintFibonacci()
{
  Console.WriteLine("Fibonacci numbers:");

  foreach (int number in GetFibonacci(5))
  {
    Console.WriteLine(number);
  }
}

IEnumerable<int> GetFibonacci(int maxValue)
{
  int previous = 0;
  int current = 1;

  while (current <= maxValue)
  {
    yield return current;

    int newCurrent = previous + current;
    previous = current;
    current = newCurrent;
  }
}
3 Likes

제게 yield는 어떤식으로 써먹으면 좋을지 모르겠는 기능 중 하나입니다…
어떤 거다라는 개념은 아는데 직접 코드에 써서 이용해본 적이 없고, 고수들의 코드도 아직 못봐서 어떻게 써먹어야할지 모르겠습니다. 유니티 하다 오신 분들은 자주 쓰셨다던데 어떤 경우에 써야하는지 잘 모르겠네요.

2 Likes

연속된 목록… 하지만 확정된 목록이 아닌 목록을 처리할 때 yield가 유용합니다.

이런 의미가 바로 스트림 (연속된 데이터) 인데요, 데이터를 송/수신 하는 구조라던가, 상태머신 등 “임시 상태를 보유하면 좋은” 케이스에 적극적으로 사용할 수 있어요.

예를 들어 위의 피보나치 수열의 코드에서,

previouscurrent가 임시(중간?) 상태가 됩니다.

3 Likes