2022. 7. 19. 16:41ㆍ코딩 2막 <C#개념편>
오늘은 코루틴에 관하여 소개하겠습니다
코루틴은 합성어로 co + routine을 직역하면
서로 협력하는 루틴을 뜻하는 일종의 루틴이다
1. 멀티스레드 장점과 단점
장점 : 일 처리속도가 빠르다
단점 : 중복되는 교차상태가 있을 경우 연산이 복잡해진다
-> 유니티는 싱글스레드를 권장함
2. 싱글스레드 형태의 코루틴
멀티스레드의 병렬적 처리를 흉내내는 기법으로, 엄밀히 말하면 멀티스레드는 아님
IEnumerator
열거자, 순서
순서대로 제공해주는 함수
*Update를 쓰는것 : 내용이 있든 없든 매프레임마다 무조건 호출됨
*Update보다 코루틴을 쓰는게 유리한 이유 :진입점과 호출점을 설정해줄수 있음
Unity에서는 싱글스레드를 권장하기때문에
개발자는 멀티스레드를 사용해야 하는 상황에서
코루틴을 통해 제 기능을 할 수 있다
IEnumerator과 IEnumerable의 차이
쉽게 말해서 IEnumerator는 순서이고, IEnumerable은 순서를 가져올 수 있는 놈이다
1
2
3
4
5
6
7
8
9
10
|
namespace System.Collections
{
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
}
|
cs |
1
2
3
4
5
6
7
|
namespace System.Collections
{
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
}
|
cs |
코루틴을 쓰기 위해서는 IEnumerator를 리턴타입으로 가지는 함수를 만들어야 한다
그럼 코루틴을 적용한 스크립트를 확인해보자
TestFunc();이 호출되면 결과는 무한루프에 빠져 터지게 된다 (에러발생)
그렇기 때문에 TestCo()라는 코루틴을 만들어 이를 해결할 수 있다
쉽게 말해 코루틴은 노예를 만들어서 일을 처리 한다
동시에 일을 처리해 보이는 것처럼 보이지만 멀티스레드와는 다르게
동시에 일을 하지 않고 update 다음으로 동시에 일을 처리하는 것처럼 보인다
그럼 왜 코루틴은 무한루프에 안 빠지는건가요?
바로 yield return을 썼기 때문이다
코루틴은 yield return라고 하는 특별한 return을 사용하는 데
뒤 조건이 만족할때까지 함수의 흐름을 다른곳으로 돌려주는 역할을 한다
또 yield return 다음 WaitForSeconds(기다릴 시간 초) 를 붙이면 원하는 시간 차이로 코루틴이 호출된다
공감해주셔서 감사합니다
'코딩 2막 <C#개념편>' 카테고리의 다른 글
[게임 디자인] 시스템 디자인의 기초 2 (0) | 2022.08.05 |
---|---|
[게임 디자인] 시스템 디자인의 기초 1 (2) | 2022.08.04 |
[C#, 유니티] 사운드 리소스 공유사이트 (0) | 2022.07.11 |
[C#, 유니티] 10. FindObjectOfType (0) | 2022.07.11 |
[C#, 유니티] 09. 프로퍼티 (set과 get) (0) | 2022.07.11 |