yield를 알려면 IEnumertor/IEnumerable을 알아야 한다.
IEnumertor는 컬렉션에서 값을 반환하는 것이고, IEnumerable이 그 값이다.
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
지금은 foreach를 사용하기 때문에 이 인터페이스를 구현하여 사용하는 것은 권장되지 않는다.
그렇지만 unity에서 yield return을 사용하기 때문에 그 개념은 알고 있는 것이 좋다.
yield return은 IEnumertor/IEnumerable의 간단한 표기이다. 그래서 직접 IEnumertor/IEnumerable을 구현할 필요가 없다.
yield return은 비동기적으로 함수를 실행할 경우에도 사용하는 리턴 값이다.
보통 함수 안의 return은 함수 안에서 구한 값을 넘기거나, 그 함수를 종료하고자 할 경우 사용하고 return을 만나면 그 함수는 메모리에서 삭제된다.(물론 자바스크립트 등에서 클로저나 다른 문법도 있다.)
하지만 만든 함수안에 yield return을 쓰면 , 사용한 곳에서 해당 함수를 호출한 곳으로 값(IEnumertor/IEnumerable 타입)을 주고 그 위치를 기억한다.
그리고 다시 그 위치에 돌아와 나머지 부분을 실행한다.
유니티에서는 update() 함수 안에 yield return WaitForSeconds(float)과 함께 사용하여 몇 초를 기다리며 사용한다.
참조 : https://ansohxxn.github.io/c%20sharp/enumerate/
'개발일지 > unity' 카테고리의 다른 글
무한 달리기 게임 알고리즘 (0) | 2022.01.21 |
---|