'프로그래밍 > C#' 카테고리의 다른 글
return default(T);란? (0) | 2018.08.02 |
---|---|
C# string 사용법 (0) | 2018.06.27 |
C# const, readonly 차이 (0) | 2018.06.04 |
C# 문법 참고 사이트 (0) | 2018.06.01 |
IEnumerator와 IEnumerable 사용법 (0) | 2017.09.15 |
return default(T);란? (0) | 2018.08.02 |
---|---|
C# string 사용법 (0) | 2018.06.27 |
C# const, readonly 차이 (0) | 2018.06.04 |
C# 문법 참고 사이트 (0) | 2018.06.01 |
IEnumerator와 IEnumerable 사용법 (0) | 2017.09.15 |
유니티를 개발하게 되면서 IEnumerator와 IEnumerable에 대해 공부하게되었다.
간단하게 요약하자면 Custom한 state를 만들어 while이나 foreach문으로 편리하게 쓰거나 Coroutine으로 사용하는
Interface의 일종
IEnumerator가 가지는 state의 초기값은 -1이다.
사용하는 방법을 코드로 풀어보면
private int[] data = { 5, 4, 3, 2, 1 }; public IEnumerator GetEnumerator() { int i = 0; while (i < data.Length) { Debug.Log(data[i]); //MoveNext.했을때 진행이 끝나는 지점. yield return data[i]; //Current에 접근했을때 진행이 끝나는 지점 ++i; } } private void Start() { IEnumerator it = data.GetEnumerator(); it.MoveNext(); // 내부적인 state가 이때 -1에서 0이 된다. Debug.Log(it.Current); // data[i]의(i = 0) 값인 5가 리턴되어 나오고 it.MoveNext(); Debug.Log(it.Current); // data[i]의(i = 1) 값인 4이 리턴되어 나오고 it.MoveNext(); Debug.Log(it.Current); // data[i]의(i = 2) 값인 3이 리턴되어 나온다 }
C#에서 list들은
IEnumerator를 원래 가지고있어
(int[] dat = { 1, 2, 3, 4, 5 };
dat.GetEnumerator(); //이렇게 나온다)
IEnumerator를 만들어 주지 않아도 된다.(위의 GetEnumerator는 대충 어떻게 동작하는지 보여주기 위한 구현)
IEnumerator를 사용하는 반복문의 2가지 예
private int[] data = { 5, 4, 3, 2, 1 }; //예_1 IEnumerator it = data.GetEnumerator(); while(it.MoveNext()) { Debug.Log(it.Current); } //예_2 foreach(var num in data) { Debug.Log(num); }
그리고 IEnumerable 이라고
public IEnumerable<int> GetNumber()
{
int i = 0;
while (i < data.Length)
{
yield return data[i];
++i;
}
}
해서
foreach (int num in GetNumber())
{
Debug.Log(num);
}
다시 돌아와서 IEnumerator를 코루틴으로 돌리면
StartCoroutine(GetEnumerator());//이렇게 하면 되고 이때 쓰는 GetEnumerator()는 만들어 줘야함
물론 StartCoroutine(data.GetEnumerator());//이렇게 쓰면 안만들어줘도 된다.
하지만 커스텀 하고싶으면 위의 GetEnumerator()처럼
IEnumerator 만들어서 입맛대로 yield return 해줘야 된다.
return default(T);란? (0) | 2018.08.02 |
---|---|
C# string 사용법 (0) | 2018.06.27 |
C# const, readonly 차이 (0) | 2018.06.04 |
C# 문법 참고 사이트 (0) | 2018.06.01 |
C# 자료구조별 속도 (0) | 2018.03.20 |