Develog
로그인

[TIL] 비동기 프로그래밍(UniTask)

muchan
muchan
∙2026년 6월 13일∙조회 5
Unity
TIL
본문 로딩 중...
이전 글[TIL] 리액티브 프로그래밍
다음 글[TIL] Unity 통합과 비동기
0
muchan

게임 버그도 콘텐츠입니다.

댓글 0

UniTask란?

Unity에 최적화된 Zero Allocation 비동기 프로그래밍 라이브러리

  • 구조체(struct) 기반 + promise 풀링 → 신규 GC 할당 제로
  • Unity PlayerLoop 통합 → 코루틴처럼 메인 스레드에서 동작
  • 완벽한 async/await 지원 → 직관적이고 안전한 비동기 코드 작성

왜 UniTask가 필요한가?

코루틴의 한계

  • GC 할당 발생: WaitForSeconds 등 YieldInstruction 객체 생성
  • 타입 안정성 부족: 반환값처리 어려움
  • 예외 처리 복잡함: try-catch 사용 불가
  • 취소 관리 번거로움: StopCoroutine 수동 관리

UniTask의 해결책

  • 구조체 사용: promise 객체를 사용하여 GC가 없다
  • 반환값 지원: 제네릭을 사용하여 타입 안정
  • 예외 처리 가능: try-catch 구문 사용 가능
  • 취소 관리 가능: CancellationToken 활용하여 취소 가

promise 객체는 비동기 작업의 미래 결과를 담는 그릇으로 "나중에 값을 줄게"라는 약속이라고 생각하면 됨

UniTask의 3가지 핵심 장점

1. Zero Allocation

struct 기반 UniTask로 Task 객체 할당을 없애고, async 상태머신의 promise 객체를 풀링·재사용해 신규 GC 할당을 제로로 만듦.

  • Task: 호출마다 클래스 인스턴스 할당 → GC 발생
  • UniTask: struct 반환 + promise 풀링·재사용 → 신규 GC 할당 없음

2. Unity PlayerLoop 통합

UniTask는 Unity의 PlayerLoop에서 직접 실행됨.

  • 코루틴처럼 메인 스레드에서 동작
  • Update, FixedUpdate, LateUpdate 등 타이밍 지정 가능

3. 완벽한 async/await 지원

  • Task처럼 async/await 키워드 사용
  • 코루틴보다 직관적인 코드 작성
  • 예외 처리, 반환값, 취소 등 모두 지원

UniTask vs 코루틴

구분코루틴UniTask
할당적음없음 (Zero)
성능보통빠름
반환값❌✅
예외 처리❌✅
취소StopCoroutineCancellationToken
타입 안정성❌✅
Unity 통합✅✅

 

새 글이 올라오면 Develog 알림으로 알려드려요

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.

관련 글

[Unity] 제네릭의 컴파일

[Unity] 제네릭의 컴파일

ㅇㅇ

10월 7일42
[Unity] 제네릭과 가변성(variance)

[Unity] 제네릭과 가변성(variance)

제네릭과 가변성

10월 6일821
[Unity] IEnumerator 개요

[Unity] IEnumerator 개요

코루틴에이저포에버

10월 6일4
[Unity] 제네릭의 컴파일
Unity

NEW[Unity] 제네릭의 컴파일

ㅇㅇ

KYO
KYO
420
KYO
KYO
∙10월 7일
420
[Unity] 제네릭과 가변성(variance)
Unity

[Unity] 제네릭과 가변성(variance)

제네릭과 가변성

KYO
KYO
821
KYO
KYO
∙10월 6일
821
[Unity] IEnumerator 개요
Unity

[Unity] IEnumerator 개요

코루틴에이저포에버

KYO
KYO
400
KYO
KYO
∙10월 6일
400