foreach ๋ฌธ์ for ๋ฌธ ์ฒ๋ผ ์์์ ์์น๋ฅผ ์ํ ์ธ๋ฑ์ค ๋ณ์๋ฅผ ์ ์ธํ ํ์ ์๋ค.
foreach๋ฌธ์ ์๋ฌด ํ์์ ๊ฐ์ฒด์์๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋๋ค.
๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ ๊ฐ์ ์ปฌ๋ ์ ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
foreach๋ฌธ์ด ๊ฐ์ฒด ๋ด์ ์์๋ฅผ ์ํํ๊ธฐ ์ํด์๋ foreach๋ฌธ๊ณผ์ ์ฝ์์ ์ง์ผ์ผ ํ๋๋ฐ,
์ฝ์์ด ๋ญ๋ค? ์ธ.ํฐ.ํ.์ด.์ค
foreach ๊ตฌ๋ฌธ์ IEnumerable์ ์์ํ๋ ํ์๋ง ์ง์ํ๋ค.
์ฆ, ํด๋์ค๋ IEnumerable์ ์์ํ๊ธฐ๋ง ํ๋ฉด foreach ๋ฌธ์ ์ด์ฉํด์ ์์๋ฅผ ์ํํ ์ ์๊ฒ ํ ์ ์๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
IEnumerable ์ธํฐํ์ด์ค๊ฐ ๊ฐ๊ณ ์๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋จ ํ๋ ๋ฟ์ด๋ค.
MyList๋ ์ด ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
๋ฉ์๋ | ์ค๋ช |
IEnumerator GetEnumerator() | IEnumerator ํ์์ ๊ฐ์ฒด๋ฅผ ๋ฐํ |
GetEnumerator()๋ IEnumerator ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
yield๋ฌธ์ ์ด์ฉํ๋ฉด IEnumerator๋ฅผ ์์ํ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๊ตฌํํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์์ฑํด์ค๋ค.
yield return๋ฌธ์ ํ์ฌ ๋ฉ์๋ (GetEnumerator())์ ์คํ์ ์ผ์ ์ ์ง์์ผ๋๊ณ ํธ์ถ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
๋ฉ์๋๊ฐ ๋ค์ ํธ์ถ๋๋ฉด, ์ผ์ ์ ์ง๋ ์คํ์ ๋ณต๊ตฌํ์ฌ yirld return ๋๋ yield break ๋ฌธ์ ๋ง๋ ๋๊น์ง ๋๋จธ์ง ์์ ์ ์คํํ๊ฒ ๋๋ค.
yield ํค์๋๋ฅผ ์ด์ฉํ๋ ๊ฐ๋จํ ์์
using System;
using System.Collections;
namespace Yield
{
class MyEnumerator
{
int[] numbers = { 1, 2, 3, 4 };
public IEnumerator GetEnumerator()
{
yield return numbers[0];
yield return numbers[1];
yield return numbers[2];
yield break;
yield return numbers[3];
}
}
class MainApp
{
static void Main(string[] args)
{
var obj = new MyEnumerator();
foreach (int i in obj)
Console.WriteLine(i);
}
}
}
<์ถ๋ ฅ๊ฒฐ๊ณผ>
1
2
3
GetEnumerator() ๋ฉ์๋๋ IEnumerator ํ์์ ๊ฐ์ฒด,
๋ค์ ๋งํด IEnumerator ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
<IEnumerator ์ธํฐํ์ด์ค์ ๋ฉ์๋ ๋ฐ ํ๋กํผํฐ ๋ชฉ๋ก>
๋ฉ์๋ ๋๋ ํ๋กํผํฐ | ์ค๋ช |
boolean MoveNext() | ๋ค์ ์์๋ก ์ด๋. ์ปฌ๋ ์ ์ ๋์ ์ง๋ ๊ฒฝ์ฐ์๋ false, ์ด๋์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ์๋ true๋ฅผ ๋ฐํ |
void Reset() | ์ปฌ๋ ์ ์ ์ฒซ๋ฒ์งธ ์์น์ '์'์ผ๋ก ์ด๋. ์ฒซ๋ฒ์งธ ์์น๊ฐ 0๋ฒ์ธ ๊ฒฝ์ฐ Reset()์ ํธ์ถํ๋ฉด -1๋ฒ์ผ๋ก ์ด๋ํ๋ ๊ฒ. ์ฒซ๋ฒ์งธ ์์น๋ก์ ์ด๋์ MoveNext()๋ฅผ ํธ์ถํ ๋ค์์ ์ด๋ฃจ์ด์ง |
Object Current{get;} | ์ปฌ๋ ์ ์ ํ์ฌ ์์๋ฅผ ๋ฐํ |
์ง๊ธ๊น์ง ์์์ yield๋ฌธ์ ๋์์ ๋ฐ์์ IEnumerator๋ฅผ ์์ํ๋ ํด๋์ค ๊ตฌํ์ ํผํ๊ณ ,
์๋๋ถํฐ๋ ์ง์ IEnumerator๋ฅผ ์์ํ๋ ํด๋์ค๋ฅผ ๊ตฌํ.
'C# > ์ด๊ฒ์ด C#์ด๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
57. ์ผ๋ฐํ ํ๋ก๊ทธ๋๋ฐ ์์ ๋ชจ์ (0) | 2022.02.28 |
---|---|
56. ์ผ๋ฐํํ ๋, ํ์ ๋งค๊ฐ๋ณ์ ์ ์ฝ์ํค๊ธฐ (0) | 2022.02.28 |
54. ์ธ๋ฑ์ (0) | 2022.02.25 |
53. ์ปฌ๋ ์ (ArrayList, Queue, Stack, Hashtable) (0) | 2022.02.25 |
52. ๊ฐ๋ณ๋ฐฐ์ด (0) | 2022.02.25 |