동기/ 비동기
동기식이란?
동기식 작업은 순차적으로 실행되는 작업을 말한다.
2가지 작업이 있다면 차례에 따라 작업을 진행하게 된다.
대신 3가지 작업이 있다 했을 때 그 중 작업이 오래 걸리는 것이 있다면 다음 작업이 막히면서 전체 작업의 효율이 떨어질 수 있다는 단점이 있다.
비동기식이란?
동기식과는 다르게 여러 작업을 동시에 실행할 수 있다.
하지만 작업이 많아진다면 동기식에 비해 알아보기 어렵고, 구현도 까다로운 것 같다.
위 내용은 유니티 코루틴에 대해 말하기 위함이다.
코루틴
코루틴이란?
작업을 다수의 프레임에 분산하는 메소드이다.
어 그럼 코루틴은 비동기식인가? 한다면, 아쉽게도 동기식이다. 뒤에서 설명하겠다.
위 사진처럼 동기식은 한 작업이 마무리 되면 다음작업으로 순차적으로 진행되어야 한다.
비동기식은 동시에 처리되는 모습을 보여준다.
이 사진을 보자.
코루틴은 동기식으로 순차적으로 작업을 진행하지만, 보통의 동기식 작업과는 다르게 하던 일을 일시중단하고 다른 작업을 확인하고 작업하다 다시 돌아와 원래하던 일을 하는 방식으로 진행된다.
비동기처럼 보이는 동기식작업이라고 보면 될 것 같다. 그리고 효율도 비동기와 같지 않다고 한다.
코루틴은 언제 사용하는가?
코루틴은 보통 업데이트 메소드에 계속 돌리기에는 아쉽고, 반복적으로 코드를 실행시키고 싶을 때 사용된다.
코루틴 사용방법
private IEnumerator FadeAway()
{
float startAlpha = 0.5f;
float alpha = startAlpha;
while(a > 0.0f)
{
alpha -= (startAlpha / flashSpeed) * Time.deltaTime;
image.color = new Color(255f/255f, 0f, 0f, alpha);
yield return null;
}
image.enabled = false;
}
위 코드처럼 캔버스에 빨간 효과?를 가끔씩 반복적으로 실행되도록 코루틴을 사용한 것이다.
IEnumerator으로 반환 값을 주고, yield return null로 아무것도 반환하지 않으면, 그냥 1프레임 쉬고 while문을 돌 것이다.
yield return WaitForSeconds(3.0f); 이런식으로 3초 뒤에 실행 되도록 사용도 가능하다.