반응형
반복기란?
Foreach 같은 반복문에서 컬렉션을 단계적으로 실행할 수 있도록 도와주는 기능이다.
다시 말해, 배열과 리스트 같은 어떠한 컬렉션을 단계별로 끊어서 코드를 실행할 수 있도록 한다는 의미이다.
왜 사용하는 것인가?
반복기의 가장 큰 이유는 단계별로 실행한다는 것에 있을 것이다.
다음 예제를 살펴보자.
public class Sample : MonoBehaviour
{
void Start()
{
foreach (object item in GetDrink())
{
Debug.Log(item.ToString() + " ");
Debug.Log(" yammi!");
}
}
public IEnumerable GetDrink()
{
Debug.Log("Start");
int i = 0;
while (i < 10)
{
Debug.Log("log cola");
yield return DrinkType.Cola;
Debug.Log("log sprite");
yield return DrinkType.Sprite;
Debug.Log("log empty");
yield return "empty";
i++;
}
}
enum DrinkType
{
Cola,
Sprite,
}
}
실행결과는 다음과 같다.
GetDrink 함수를 실행하면 첫 번째 yield return을 만나기 전까지 모든 코드를 실행한다.
그리고 yield return의 위치를 기억했다가 다음 GetDrink 함수 실행 때 해당 위치부터 코드를 실행하는 것이다.
유니티에서 어떻게 사용할 수 있을까?
우리는 이미 코루틴을 사용하면서 반복기를 사용하고 있다.
코루틴에서 IEnumerator를 사용하기 때문이다.
이는 IEnumerator가 주는 장점들 때문인데, 가장 큰 장점으로는 yield return의 사용에 있다.
yield return 구문을 통한 제어는 비동기 제어(실제로는 비동기가 아니다)를 아주 편하게 해준다.
만약 5초에 한 번씩 실행하는 어떤 함수가 있다고 가정하자.
우리는 그 함수를 Update에서 실행하기 위해 timer변수와 executeTime 등의 변수를 선언한 뒤 번거롭게 if문을 사용해야 할 것이다.
가독성도 떨어지고 수정하기에도 여간 귀찮은 것이 아니다.
반면 코루틴으로 제작한다면 while문 안에 yield return new WaitForSeconds() 면 끝난다.
따라서 유니티에서는 이러한 비동기 형태의 처리에 있어 IEnumerator를 사용하는 것이다.
반응형
'C# 프로그래밍 > 문법 개념' 카테고리의 다른 글
[C#] 추상화 (Abstraction) (0) | 2022.05.26 |
---|---|
[C#] 이벤트 (Event) (0) | 2022.05.20 |
[C#] 다형성 (Polymorphism) (0) | 2022.05.08 |
[C#] 인터페이스 (Interface) (0) | 2022.05.05 |
[C#] 액션과 펑션 (Action & Func) (0) | 2022.05.05 |