[Unity] Invoke와 코루틴의 차이

Flaming Bun·2025년 7월 16일

Unity

목록 보기
30/39

참고 사이트 : https://wonsang98.tistory.com/220

Invoke

Invoke는 지정 시간 이후 함수를 실행하거나, 반복 실행할 때 사용하는 기능이다.


특징

  • 사용법이 간단하다.

  • 함수 이름과 시간을 받아서 실행한다.

  • 반복 실행 및 취소도 메서드 호출로만 가능하다.

  • GameObject가 비활성화되어도 Invoke 함수는 계속 실행된다.(오브젝트 파괴 시 종료된다.)


단점

  • 매개변수 전달이 불가능하다.

  • 문자열로 함수명을 넘기기 때문에 오타 방지가 어렵다.

  • 내부적으로 Reflection을 사용한다.(코루틴보다 느릴 수 있다.)

  • 복잡한 조건과 로직처리가 어렵다.



코루틴

Coroutine은 메서드 실행을 한 번에 끝내지 않고, 중간에 양보(yield)하고 다시 재개할 수 있는 Unity의 기능이다.


특징

  • 멀티스레드는 아니지만, 여러 작업이 동시에 처리되는 것처럼 비동기적인 구조를 만든다.

  • 코루틴은 IEnumerator를 반환하는 메서드에서만 사용 가능하다.

  • 일정 시간 지연, 특정 조건까지 대기, 프레임 단위로 작업 분할 등 시간 제어가 매우 편리하다.

  • 매개변수를 넘겨서 유연하게 사용 가능하다.

  • 실행 중단, 종료, 재시작이 자유롭다.


단점

  • GameObject가 비활성화 될 경우, 코루틴은 자동으로 정지된다.

  • 코루틴으로 시작 시, yield로 객체를 만들 때 GC 오버헤드가 발생한다.

  • 너무 많은 코루틴을 동시에 실행하면 관리가 어려울 수 있다.



Invoke와 코루틴의 차이

구분Coroutine(코루틴)Invoke(인보크)
실행 방식IEnumerator + yield(양보/재개)함수명(String), Reflection 사용
지연 실행/반복OO
매개변수 전달OX
유연성복잡한 조건, 흐름 제어에 유리하다.단순 지연, 반복에 적합하다.
GameObject 비활성즉시 정지한다.계속 실행된다.
TimeScale 0 적용WaitForSecondsRealtime으로 무시 가능불가능 (TimeScale의 영향 받음)
종료 방법StopCoroutine, 조건문 활용CancelInvoke, 오브젝트 파괴
성능상대적으로 빠름, 가비지가 있다느릴 수 있다(Reflection 때문)
코드 간결함상대적으로 복잡하다아주 간단하다.

0개의 댓글