1. 코루틴 (Coroutine)
코루틴은 시간의 경과에 따른 절차적 단계를 수행하는 로직을 구현하는 데 사용되는 함수이다.
게임 프로그래밍을 보면 수많은 오브젝트들이 상호작용하여 표현되기 때문에 동시성을 표현하는 것이 중요하다.
유니티는 버그 발생률을 줄이고 스레드 간 교착 상태 등의 문제들을 최소화하기 위해 멀티 스레드가 아닌 단일 스레드로 동작한다.
그렇기 때문에 동시성을 확보할 수 있는 코루틴을 이용하여 여러 개의 스레드가 동시에 동작하는 효과를 보여줄 수 있다.
2. 코루틴의 특징
특징 1. 다중 작업
코루틴을 프로그래밍 언어로 표현하자면
코 + 루틴 즉 협력(함께) + 어떤 작업을 정의한 명령어의 집합(하나의 함수) 정도로 생각하면 된다.
Routine은 간단하게 말해서 우리가 작성하는 코드들의 집할으로 하나의 프로그램은
크고 작은 여러 가지 루틴들을 조합하여 만들어진다고 볼 수 있다.
그런 루틴은 다시 메인 루틴과 서브 루틴으로 나뉘는데 일반적으로
main 함수에 의해 수행되는 프로그램의 흐름을 메인 루틴이라고 한다.
반면에 main 함수 안에서 실행되는 개별 함수들에 의해 수행되는 흐름을
서브 루틴이라고 한다.
그렇다면 코루틴은 서브 루틴에 속하는 건가??
서브 루틴의 특징을 살펴보면
서브 루틴은 진입하는 지점과 빠져나오는 지점이 명확하다.
메인 루틴에서 서브 루틴을 호출한다면 서브 루틴의 맨 처음 부분에 진입하여
코드를 실행할 것이고 return 만나 종료되거나 모든 코드가 끝나 함수가 종료될 것이다.
즉 서브 루틴은 단일 지점에서 시작되고 특정 지점에 종료가 된다는 뜻이다.
코루틴 방식은 서브 루틴과는 다르게 중간에 빠져 나올 수 있다.
즉 진입점과 탈출점이 여러 개이기 때문에 임의 지점에서 Stop하고 해당 지점에 다시
재개할 수 있다는 특징을 가지고 있다.
그렇기 때문에 코루틴은 다중 작업이 가능한 특징을 가지고 있다.
특징 2. 동시성
코루틴을 사용하면 스레드를 유지하면서 멀티 스레드처럼 동시성을 확보할 수 있다.
동시성 프로그래밍이란
물리적으로는 하나의 일만 처리하지만 논리적으로 봤을 때 여러 일을 동시다발적으로 하는 것으로
동시에 여러 프로그램을 돌리는 것이 아닌 그렇게 보이게 하는 기법으로 시간을 분할하여 스레드들이 서로
번갈아가며 실행되게 하는 방식
특징 3. 비동기 처리
비동기 프로그래밍이란 프로그램의 주 실행 흐름에서 특정 작업을 위해 프로그램이 멈추고 해당 작업이 끝날 때까지
기다리는 것이 아닌 해당 작업은 별도의 공간에 맡겨두고 그대로 흐름을 이어가는 병렬처리 방식이다.
3. 코루틴의 장단점
- 장점
: 스레드를 유지하면서 멀티 스레드처럼 동시성을 확보할 수 있다
-단점
: StartCoroutine, yield return new을 사용함으로써 새로운 인스턴스가 생성이 되어 가비지 컬렉션이 많이 발생한다.
'Unity 개발' 카테고리의 다른 글
[Unity, c#] 인터페이스와 추상클래스 (0) | 2023.01.26 |
---|---|
싱글톤 오브젝트와 정적 멤버 (0) | 2022.12.09 |
디자인 패턴 : 전략 패턴 (0) | 2022.12.02 |
Audio Sound Linear Rolloff 적용 방법 (1) | 2022.11.29 |
Mobile : 해상도에 따른 화면 비율 맞추기 (0) | 2022.11.25 |