코루틴
유니티에서 빼놓을수 없는 요소중 하나는 코루틴을 이용한 비동기 처리이다. 코루틴은 다음과 같은 특징을 가진다.
- 여러개의 입구를 허용하여 실행 재개가 가능한 것 yield return으로 멈춘 시점에서 다시 시작
- 이전 상태를 기억하고 있다가 재호출시 해당 위치에서 시작
- 유니티에서 협력형 멀티태스킹을 구현하는 용도로 사용(시분할)
- CPU를 나눠쓰는 방식
- 리소스를 사용하는 도중에 강제로 CPU를 뺏거나 하지 않아 임계영역을 보호하기 위한 락이나 세마포어등 동기화 불필요
- 특정 작업을 단계적으로 발생하게 한다
- 시간이 흐름에 따라 발생하는 루틴을 작성할 수 있다
- 다른 연산이 완료될때까지 기다리는 루틴을 작성할 수 있다
코루틴을 만들어본 사람은 yield return ~ 와 같은 구문을 봤을것이다. 코루틴에 이지점이 다음 진입점이 된다. 이것이 무슨말이냐면, yield return 부분부터 다음호출이 시작된다는 것이다.
ex) yield return new WaitForSeconds(time); 은 time이라는 시간을 기다린후 진입이란 뜻
yield return 으로 코루틴을 리턴하면 해당 작업을 기다린뒤 뒤 작업을 수행한다.
이러한 코루틴은 주로 유니티에서의 애니메이션 처리나 지연 연산등에 이용한다. 그 외에도 코루틴의 특성은 많은곳에서 활용할수 있을것이다.
여담으로 비동기적인 처리를 하는 코루틴의 특성상 매계인자로 ref, out 은 사용할수 없다. 과거 이 사실을모르고 꾀나 고생을 했던 기억이 난다.