
1. 코루틴
1-1. 코루틴이란?
- 유니티에서 함수의 실행을 일시중지하고, 나중에 다시 이어서 실행할 수 있는 아주 유용하고 범욕적으로 사용되는 개념.
- 일반 함수의 반환인 return대신 yield 키워드를 사용.
-> yield 키워드 사용시 사용이 일시 중지되고 다른 코드를 실행하거나 유니티에게 제어권을 반납하고 다음 실행시 중단점부터 이어서 실행.
- 코루틴은 라이플 사이클 내에서 직렬적으로 일을 처리하는 동기 작업!
-> 비동기 작업이 아님!
1-2. 코루틴 사용시 주의점
- 사용이 끝나면 반드시 중지.
-> 코루틴을 실행하면 클래스 객체가 생성되며 메모리가 할당됨.
-> 이를 별도로 해제하지 않는 상태로 반복/누적이 될 경우, 메모리 누수가 발생할 수 있음.
- 코루틴을 변수에 담아 사용하기
-> 코루틴을 실행하면 클래스 객체가 생성되기 때문에, 힙 메모리에 클래스 인스턴스가 할당됨.
-> 주기적으로 실행되어야 하는 코루틴의 경우 변수를 선언해 미리 힙에 할당함.
-> 해당 변수에 생성되는 코루틴 객체를 할당하는 방식을 사용한다면 메모리 공간을 절약하며 사용할 수 있기에 단편화 방지 가능.
- 코루틴의 단점으로 yield return new, 즉 new를 사용할때마다 new로 인한 할당이 지속적으로 발생.
2. 코루틴 라이프 사이클
2-1. yield
- yield 코루틴은 모든 Update함수가 다음 프레임에 호출된 후 계속됨.
2-2. yield WaitForSeconds
- 지정한 시간이 지난 후, 모든 Update함수가 프레임에 호출된 후 계속됨.
2-3. yield WaitForFixedUpdate
- 모든 FixedUpdate가 모든 스크립트에 호출된 후 계속됨.
- FixedUpdate 전에 코루틴이 양보하면 현재 프렝임의 FixedUpdate 이후에 재개.
2-4. yield WWW
2-5. yield StartCoroutine
- 코루틴을 연결하고 MyFunc 코루틴이 먼저 완료되기를 기다림.

3. UniTask
- 코루틴과 비슷한 기능.
- 코루틴은 싱글스레드, 유니태스크는 멀티스레드로
코루틴은 주로 같은 로직에서 돌아가는 기능을 구현할 때,
유니태스크는 다른 로직에서 병렬적으로 처리할 때 사용.