개발일지/unity

yield return

자코린이 2022. 2. 7. 21:27

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/

 

[C#] IEnumerable, IEnumerator 그리고 yield

enumerate 영어로 수를 세다. 카운팅 하다! 두 인터페이스는 열거자와 관련이 있다.(반복자와 동일한…것 같다. 아닐수도..) using System.Collections; C#의 모든 Collections 컬렉션은 IEnumerable, IEnumerator를 상

ansohxxn.github.io

 

'개발일지 > unity' 카테고리의 다른 글

무한 달리기 게임 알고리즘  (0) 2022.01.21