728x90
yield 키워드는 IEnumerable<T> 화 함께 쓰인다. yield 키워드로 리턴되는 값들을 선언하면, 위에서부터 순차대로 값을 리턴한다. 만일 yield 키워드로 리턴하는 함수가 한 번 호출되면 첫번째 리턴값을 리턴한다.
다을 foreach 문에서 해당 함수를 순차대로 호출해 보았다.
class Program
{
static void Main(string[] args)
{
foreach (int num in getNumber())
{
Console.WriteLine(num);
}
}
static IEnumerable<int> getNumber()
{
yield return 10;
yield return 20;
yield return 30;
}
}
결과는 다음과 같다.
10
20
30
yield break; 문은 yield return 을 종료하고 루프 문을 빠져나올 때 사용된다.
class Program
{
static void Main(string[] args)
{
foreach (int num in getNumber())
{
Console.WriteLine(num);
}
}
static IEnumerable<int> getNumber()
{
yield return 10;
yield return 20;
yield break;
}
}
출력 결과 :
10
20
IEnumerator 와 함께 사용하는 예시
using System;
using System.Collections;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
// [1]
// 반복문을 사용하여 호출하여 Iteration 호출 수만큼
// 리턴 값 위치를 1씩 이동시키며 출력
EnumeratorTest iterationTest1 = new EnumeratorTest();
foreach (int item in iterationTest1)
{
Console.WriteLine(item);
}
// [2]
// 반복문을 사용하지 않고 수동으로 1씩 호출하여 출력
EnumeratorTest iterationTest2 = new EnumeratorTest();
IEnumerator ienumerator = iterationTest2.GetEnumerator(); // 직접 호출
ienumerator.MoveNext();
Console.WriteLine(ienumerator.Current);
ienumerator.MoveNext();
Console.WriteLine(ienumerator.Current);
ienumerator.MoveNext();
Console.WriteLine(ienumerator.Current);
ienumerator.MoveNext();
Console.WriteLine(ienumerator.Current);
ienumerator.MoveNext();
Console.WriteLine(ienumerator.Current);
}
}
class EnumeratorTest
{
// foreach 문을 사용하여 컬렉션을 반복하려면,
// GetEnumerator() 메서드를 포함해야 한다.
public IEnumerator GetEnumerator()
{
int[] num = { 1, 2, 3, 4, 5 };
for (int i = 0; i < num.Length; i++)
{
yield return num[i];
}
}
}
}
출력 결과 :
1
2
3
4
5
1
2
3
4
5
IEnumerator 사용 시, GetEnumerator 메서드를 포함하지 않으면 CS1519 오류가 발생한다.
728x90
'Language > C#' 카테고리의 다른 글
[C#] Value Type & Reference Type (0) | 2023.09.13 |
---|---|
[C#] 예외 처리 (0) | 2023.09.03 |
[C#] 중급 문법 - 데이터 타입 (Data Type), 데이터 클래스와 null 핸들링, 그리고 enum (0) | 2023.09.01 |
[C#] 기초 문법 - 반복문 (while, for, foreach) & 무한루프 (0) | 2023.09.01 |
[C#] 기초 문법 - 조건문 (if, switch, 삼항 연산자) (0) | 2023.08.31 |