C#에서 coroutine(코루틴)은 비동기 코드를 구현하기 위한 방법 중 하나이다.
지금까지는 비동기라는 점만 알고 딱히 사용하지는 않았는데 이제와서 다시 생각해보니
async 키워드랑 어느 부분이 다른지 정확히 알고싶어서 공부해보았다.
1.코루틴의 정의
C#에서 coroutine(코루틴)은 비동기 코드를 구현하기 위한 방법 중 하나입니다. Coroutine은 일반적인 메서드처럼 보이지만, 중간에 일시 중지되어 다른 coroutine을 실행하고 나중에 중단한 지점부터 계속해서 실행됩니다.
라고 한다. 한마디로 일시정지가 가능한 비동기 방법이다. 이는 게임에서 굉장히 유용하게 사용할 수 있을듯 하다.
2.코루틴은 왜 사용하나 ?
유니티에서 코루틴은 비동기 작업을 처리하면서도 게임 루프의 제어를 유지할 수 있기 때문에 사용됩니다. 코루틴은 일시 중지, 재개, 일시 중지된 시점부터 실행하는 등의 기능을 가지고 있어서, 일정한 시간 동안 대기하거나 다른 처리를 하고 다시 원래 작업으로 돌아오는 등의 작업을 수행할 수 있습니다.
3.구체적으로 어떻게 정지가 가능한가 ?
코루틴은 함수가 실행되는 동안 실행 위치를 저장하고 나중에 그 위치에서 실행을 다시 시작할 수 있게 합니다.
코루틴의 상태는 코드 실행 위치와 로컬 변수, 매개 변수 등의 값들이 저장됩니다.
4.구체적인 코루틴의 구성요소
코루틴은 단일 스레드에서 동작하며, 하나의 스레드 자원을 나누어 사용합니다. 코루틴은 단일 스레드에서 실행되지만, 실행 중인 코드에서 yield 반환문을 만나면 실행을 일시 중단하고, 다시 재개할 때 yield 반환문 이후의 코드부터 실행합니다. 이 때 코루틴이 사용하는 스택, 프로세스의 값 등은 메모리에 저장되어 있어, 재개되는 시점에서 저장된 상태를 불러옵니다. 이를 통해, 하나의 스레드에서 코루틴과 동기적 코드를 번갈아가며 실행할 수 있습니다.
5.문법요소 정리
코루틴을 구현할 때는 보통 IEnumerable 또는 IEnumerator 인터페이스를 구현하는 방식을 사용합니다. yield return 키워드는 반드시 이러한 인터페이스를 구현한 메소드 내에서 사용되어야 합니다.
한마디로 메서드를 IEnumberable로 선언하고, yield return을 선언해서 일시중단할 포인트를 설정하면 된다.
예제코드
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
IEnumerator coroutine = CountCoroutine();
while (coroutine.MoveNext())
{
Console.WriteLine(coroutine.Current);
}
Console.WriteLine("Coroutine End");
}
static IEnumerator CountCoroutine()
{
int count = 0;
while (count < 10)
{
yield return count;
count++;
}
}
}
'프로그래밍 언어 > c#' 카테고리의 다른 글
C# 6.0 정리 (1) | 2023.04.24 |
---|---|
C# abstract class, Interface (0) | 2023.04.24 |
c# Reflection, Attribute (0) | 2023.04.23 |
c# using문은 무엇인가 (0) | 2023.04.23 |
c# 스레드 :: 비동기 프로그래밍 기초 (1) | 2023.04.21 |