- 주제
>> 동기와 비동기
(개념)
(실생활 비유)
>> Coroutine은 비동기적 동기
(Coroutine이 사용되는 좋은 예)
(나쁜 예)
- 공부내용
1. 동기와 비동기란?
1-1. 동기(Synchronous)
: 작업이 순차적으로 실행된다.
동기적 코드는 한 번에 하나의 작업만 처리되기 때문에,
이전 작업이 완전히 끝날때까지 기다리느라 대기시간이 발생할 수 있다.
실생활 비유
레스토랑에서 주문(작업) + 대기
-> 주문한 음식이 준비될 때까지 기다린다.
1-2. 비동기(Asynchronous)
: 작업이 동시에 실행된다.
비동기적 코드는 여러 작업을 동시에 처리하고, 작업이 완료되면 그 결과를 처리한다.
실생활 비유
온라인에서 주문(작업) + 배송 완료 전에 다른 주문(작업)
-> 상품을 주문하고 나면, 주문한 상품이 배송되기 전에도 다른 상품을 주문할 수 있다.
2. Coroutine은 비동기적 동기
: Coroutine은 겉보기에는 여러 작업이 동시에 이루어지는 것 처럼 보이나,
중간에 일시 중지와 다시 시작이 번갈아 일어나 동기의 특성을 가지고 있다.
이러한 특성으로 while 문에 의해 오래 실행되는 Coroutine은 메모리 누수가 발생할 수 있다.
--> StartCoroutine 함수를 사용하여 시작,
--> Yield 구문을 통해 일시 중지,
--> 다시 시작
2-1. 좋은 예제
Coroutine이 짧은 대기 시간에만 사용되어, 메모리 누수가 발생하지 않는다.
IEnumerator MyCoroutine()
{
Debug.Log("Coroutine 시작");
yield return new WaitForSeconds(1); // 1초 대기
Debug.Log("1초 후 Coroutine 종료");
}
void Start()
{
StartCoroutine(MyCoroutine());
}
2-2. 나쁜 예제
Coroutine이 while문 안에서 계속 실행되어, 메모리 누수가 발생한다.
IEnumerator MyBadCoroutine()
{
while (true)
{
Debug.Log("Coroutine 계속 실행 중...");
yield return null; // 계속 실행되는 Coroutine
}
}
void Start()
{
StartCoroutine(MyBadCoroutine());
}
'유니티' 카테고리의 다른 글
Day 34 - ScriptableObject & (프리팹 또는 GUID) (0) | 2024.05.29 |
---|---|
Day 33 - 3D 게임(해와 달) (0) | 2024.05.28 |
Day 31 - 객체 지향 SOLID 원칙(표 정리, 예제) (0) | 2024.05.26 |
Day 30 - Rigidbody ForceMode 와 Raycast (0) | 2024.05.24 |
Day 29 - 락 오브젝트(동기화작업 / 코루틴이나 잡시스템과 사용 가능) (0) | 2024.05.23 |