코루틴(Coroutine)

박창훈 (MERHENNE)·2020년 6월 21일
0

Unity3D.N.Csharp

목록 보기
1/1
post-thumbnail

이제까지 배운 것들을 되돌아 보는 시간을 가지기 위해 블로그 작성을 시작하였다.
내가 잘 알았던 것, 잘 알지 못했던 것들을 기록하면서 더 나은 프로그래머가 되기를 원한다.


오늘은 Coroutine에 대해서 되돌아 보는 시간을 가진다.

  • Coroutine은 메인 루틴과 대등한 관계를 가지며, Coroutine과 함께 호출한 메인 루틴과 함께 실행되는 구조를 가진다.
  • 함수의 반환형으로 *IEnumerator 를 사용한다.
  • 함수 내부에서 적어도 한번 이상은 yield return null;을 사용하여야 한다.
  • Coroutine은 자신을 호출한 함수에 데이터를 하나 념겨주고 쉬게 되며,
    받은 메인 루틴의 함수는 데이터를 받아 처리한 후 코루틴에게 다음 데이터를 요청한다.
  • Coroutine은 하나의 프로세스를 여러 루틴들이 시간을 나누어 사용하는 것이다.
    <-> Thread는 여러 프로세스가 동시에 여러 작업을 하는 것이다.

*IEnumerator
1. C# Iterator Interface가 프로그래머에게 IEnumerator를 구현 할 수 있도록 도와준다.
2. IEnumerator는 데이터의 목록을 하나씩 넘겨줄 때 사용되는 인터페이스이다.

서브루틴과 코루틴의 차이

  • 서브루틴: 일반적인 함수에서 사용되는 작동개념. 시작할 때 진입하는 지점을 저장하고, return 구문에 의해서 종료되는 지점을 저장한다.
  1. 서브루틴은 호출될 때마다 코드의 첫 부분부터 다시 실행 하지만, 코루틴은 중단되었던 코드의 다음 위치 부터 실행한다.
  2. 진입지점이 1개인 서브 루틴에 비해, 코루틴은 진입 지점을 여러개 정의할 수 있다.

yield

함수의 코드가 실행한 결과를 반환한다.
코루틴이 정의된 작업을 실행하다가 yield return 구문을 만나면,
*지정된 명령 을 실행시키고, 코루틴을 호출했던 루틴으로 잠시 제어 권한을 넘겨준다.

순서지정된 명령설명
1null다음 프레임까지 대기
2WaitForSeconds(float)지정한 시간(단위: 초)만큼 대기
3WaitForFixedUpdate()다음 FixedUpdate 프레임까지 대기
4WaitForEndOfFrame()모든 렌더링 작업이 끝날 때까지 대기
5WWW(string)웹 통신 작업이 끝날 때까지 대기
6AsyncOperation비동기 작업이 끝날 때까지 대기

Coroutine 사용법

  1. StartCoroutine의 매개변수로 함수를 전달하여 호출할 수 있다.
StartCoroutine(CoroutineMethod());
  1. 호출하고자 하는 함수의 이름을 string으로 전달하여 호출할 수 있다.
StartCoroutine("CoroutineMethod"); 

단, 함수의 이름으로 문자열의 형식으로 전달하면 간편하게 사용할 수 있지만 실제 함수를 찾는 과정이 필요하기 때문에 성능이 저하될 수 있다.

  1. 호출하고자 하는 함수의 매개변수가 1개 이상일 때, 다음과 같이 호출할 수 있다.
Startcoroutine("CoroutineMethod", 1.0f);

참고

  1. 피케의 게임/IT 블로그
  2. 뻔뻔한 블로그

0개의 댓글