๊ฑ ํผ์ ๋ง ์ด ๊ฑด๋ฐ ์ฝ๋ฃจํด ์ธ๋ถ์ ์ธ ๊ฑฐ ๊ถ๊ธํดํ๋ ์ฌ๋๋ค ๋์๋ ๊น ์ฌ๋ฆผ!!!!!ย ๋ฌธ์ ๋ฉด ์ญ์
***
์์ Coroutine ์ ๋ํด ์์ธํ ์์๋ณธ ๋ด์ฉ์ ์ ๋ฆฌํ๋ค.
Coroutine์ IEnumerator ์ ๋ฐํ ํ์ ์ ๊ฐ์ง๊ณ , ํจ์ Body ์ yield return ๋ฌธ์ ํฌํจํ ํจ์์ด๋ค.
๊ทธ๋ฅ ์ผ๋ฐ ํจ์์ฒ๋ผ (๋ฐํ ํํ void ์ธ ์ ๋ค์ฒ๋ผ) ํธ์ถํ๋ ๊ฒ ๋ํ ๊ฐ๋ฅํ๋ค!
๊ทธ๋ผ, Coroutine์ IEnumerator ์ yield return ์ด ๊ธฐ๋ฅํจ์ผ๋ก์จ ๋ง๋ค์ด์ง๋ค๋ ๊ฒ์ธ๋ฐ, ์ด๊ฒ์ด ๋ฌด์์ผ๊น?
IEnumerator, IEnumerable, ForeachIEnumerator (I Enum er ator)Class ๋ด๋ถ์ Collection์ ๋ฐ๋ณตํ ์ ์๋๋ก ์ง์ํ๋ค.
Collection : object (๊ฐ์ฒด)๋ฅผ group์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ. Array, Collection ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
์์ ์ค๋ช
์ผ๋ก๋ ๋ถ์กฑํ ์ ์ด ์์ ๊ฒ ๊ฐ์ ์ถ๊ฐ ์์ :
IEnumerator interface ๋ฅผ ๊ตฌํํ Class์ ๊ฒฝ์ฐ, ๊ทธ ๋ด๋ถ ๊ตฌ์ฑ์์๋
- Collection (์ด๋ค ํ์ ์ ๊ดํ Group - List ์ผ ์๋, Array ์ผ ์๋ ์๋ค.)
- Index : int ํ ๋ณ์. ์ด๋ค ์ง์ ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ์๊ฐ.
- ์๋์ ์์ ๋ Method ๋ค : ์ค์ง์ ์ผ๋ก ์ํ๋ฅผ ๋๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌํ๋ Class๋, ํด๋น Class ๋ด๋ถ์ ๋ค์ด์๋ Collection์ ์ํ๋ฅผ ๋๋ ๊ฒ์ ์ง์ํ ์ ์๋๋ก ํด์ค๋ค.
Class ๋ด๋ถ Collection ์ ๋ฐ๋ณตํ ์ ์๋๋ก ์ง์ํ๋ IEnumerator๋ฅผ ๋ ธ์ถ์ํจ๋ค.
public interface IEnumerable { IEnumrator GerEnumerator(); // ๋ง ๊ทธ๋๋ก, IEnumerator๋ฅผ ๋ ธ์ถํ๋ค. ๋ฐํํ์ฌ, ํด๋น interface์ ์ ๋ณด๊ฐ ๋๋ฌ๋๋๋ก ๋ง๋ค์ด์ฃผ๋ ํจ์๋ฅผ, ํด๋น class ๋ด์ ๊ตฌํํ๋๋ก ํ๋ค. }์ ๋ฆฌ ๋ฐ ํ์ฉ์ ๋ฆฌ์ฆ, IEnumerator๋ก ๊ตฌํ๋ Class ๊ฐ ํด๋น Class ๋ด๋ถ์ ๋ค์ด์๋ Collection์ ์ง์ ์ ์ธ ์ํ๋ฅผ ์ฑ
์์ง๋ฉฐ.
IEnumerable ์ ๊ฒฝ์ฐ, IEnumerator ์ ๊ดํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์๋ฅผ ๋ค์ด ์ค๋ช ํด๋ณธ๋ค.
A Class ๊ฐ ์๋ค๊ณ ํ์.
List <'A'> ๋ฅผ Field ๋ก์ ๊ฐ์ง๋ฉฐ, IEnumerator ๋ก ๊ตฌํ๋, AEnum Class ๊ฐ ์๋ค ํ์.
AEnum Class๋ Field ๋ฅผ ๋ฐ๋ณตํ๊ฑฐ๋ ํ์ํ ์ ์๋ค.
์ด AEnum ์ Field ๋ก์ ๊ฐ์ง๊ณ ์๋, IEnumerable ๋ก ๊ตฌํ๋, AEnumerable Class๊ฐ ์๋ค ํ์. ํด๋น Class ๋ GetEnumerator() ๊ฐ ๊ตฌํ๋์ด ์์ ๊ฒ์ด๊ณ , ํด๋น GetEnumerator() ๋ AEnum์ ๋ฐํํ ๊ฒ์ด๋ค.
๋๊ฐ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋๋ ๊ฒ.
ํ์ฉIEnumerable ๋ก ๊ตฌํ๋, Class ๋ด๋ถ์ ์ง์ ์ ์ผ๋ก Collection์ด ์กด์ฌํ๋ฉฐ, GetEnumerator ์์ ๋ฐํํด ์ค ๋, IEnumerator ๋ฅผ ๊ตฌํํ Type ์ ๋ฐ๋ก new ๋ก ์์ฑํ์ฌ ๋ฐํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
๋งํฌ์ Person, PeopleEnum, People Class ์์ ์ฐธ๊ณ
๋ํ IEnumerable ์ด ์ฌ๋ฌ IEnumerator๋ฅผ ๊ฐ์ง๊ณ ์์ ์๋ ์๋ค.
foreachForeach ์ ์ค์ฒด : GetEnumerator() ํจ์๋ฅผ ํตํด ์ด๊ฑฐ์ IEnumerator ๊ฐ์ฒด๋ฅผ ๋ฆฌํด ๋ฐ๊ณ ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ค.
์ฆ, ์์ ์ ๋ฆฌ์์์ ์์๋ฅผ ๋ฐํ์ผ๋ก ์๊ฐํด๋ณด๋ฉด, foreach(A "๋ณ์์ด๋ฆ" in "AEnumerable type ์ ํด๋นํ๋ ๋ณ์์ด๋ฆ") ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
(์์ A Class, AEnum Class, AEnumerable Class ๋ก์ ์์ ํ ์์ ์ฐธ๊ณ .)
๋ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด๋ณด๋ฉด, ์๋ ์ฝ๋์ foreach ๊ฐ ๋์ผํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
IEnumerator e = AEnumerable๋ณ์์ด๋ฆ.GetEnumerator(); while(e.MoveNext()) { // Body for foreach : foreach ์์ ๋ค์ด๊ฐ ๋ด์ฉ๊ณผ ๋์ผ. }yieldMicrosoft ์์๋ yield keyword ๋ฅผ ์คํ๋ฌธ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์, yield ๊ฐ ์ฌ์ฉ๋ ๊ทธ ํด๋น method, operator, get Accessor ๋ฑ์ด '๋ฐ๋ณต์(Iterator)' ์์ ์๋ฏธํ๋ค.
ํด๋น keyword ๋ฅผ method ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
์ฆ, yield return ์ ์ฌ์ฉํ method ๋, ์์ ๋ฐ๋ผ ๋ฐ๋ณต์๊ฐ ๋๋ค.
- ๋ฐ๋ณต์๊ฐ ๋ method ๋ฅผ ์คํํ๋ฉด, ํจ์๊ฐ ์คํ๋๋ ๊ฒ์ด ์๋ yield return ์ ๋ฐ๋ผ ๊ตฌ์ฑ๋ IEnumerator ๊ฐ ๋ฐํ๋๋ค.
- ์ด IEnumerator ๋ method์ ๊ตฌ์กฐ์ ๋ฐ๋ผ ์์๊ฐ ๋๋์ด์ ธ ์๋ค. (yield return ์ด ์กด์ฌํ๋ ๊ตฌ๊ฐ๋ง๋ค, ๊ฐ method ์ body ๊ฐ ๋๋์ด์ ธ ์๋ค.) ์ด ํจ์๋ค์ ๋ถ๋ถ๋ค์ IEnumerator ์์ ์ฌ์ฉ๋๋ Collection์ ์์์ฒ๋ผ ๋ค๋ฃฌ๋ค.
- ๋ํ, ๋ฐ๋ณต์๊ฐ ๋์ด Method ์์ฒด์์ IEnumerator ๋ฅผ ๋ฐํํ๋ค๋ ์ ์์, IEnumerable ๊ณผ ๋์ผํ ์ญํ ์ ํ๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค. (ํด๋น method ๋ IEnumerator ๋ฅผ ๋ฐํํ๋ฏ๋ก. - IEnumerable ์ ์ญํ ์ธ "IEnumerator ๋ฅผ ๋ ธ์ถ์ํจ๋ค" ๋ ๊ฒ์ ์ํํ๊ณ ์์.)
IEnumerator ์ yield ๋ฅผ ์ด์ฉํ์ฌ, ์ผ๋ฐ์ ์ธ ์ํฉ์์ ํจ์์ ์คํ์ด ์ง๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ๋ณ๋์ Thread ์ฒ๋ผ ์คํ์ํฌ ์ ์๋๋ก ๋ง๋ ๊ฒ.
์๋ ๋ด์ฉ์ ์๊ณ ์๋ ๋ด์ฉ์ด๋ผ ๋ณ๋ ์ ๋ฆฌ ํ์์ฑ์ ๋ชป ๋๊ปด ์๊ธฐ๋ง ์ฎ๊ธด๋ค.

Coroutine ์ผ๋ก์ IEnumerator ์ ๋ฐํํํ๋ฅผ ๊ฐ์ง method ๋ฅผ ์คํํ๋ค.
์ด๋ ์ฆ, Coroutine ์ ํตํด IEnumerator method ๊ฐ ์คํ๋ ๊ฒฝ์ฐ, foreach ์ ํํ์ฒ๋ผ ํด๋น ํจ์์ ๋ถ๋ถ๋ค์ด ์คํ๋๋, ๋ฐํ ๋ฐ๋ ๊ฒ์ ๋ฐ๋ผ Unity ๋ด๋ถ์ , ํน์ C# ๋ด๋ถ์ ์ผ๋ก ๋ง๋ จ๋์ด์ ธ ์๋ ํน๋ณํ ๊ธฐ๋ฅ๋ค์ด ๋์ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
ex - yield return new WaitForSecond(?f); ๋ฑ.
์๋ฃ ๋ฐ ์ถ์ฒ- ๊ณต๋ถํ๋ ์๋นต๋ง - IEnumerable, IEnumerator ๊ทธ๋ฆฌ๊ณ yield
- ๊ณต๋ถํ๋ ์๋นต๋ง - Coroutine, Custom Coroutine, ์ต์ ํ
- IEnumerator๋ ๋ฌด์์ธ๊ฐ?!
- Coroutine ์ต์ ํ
๋๊ธ 1