Coroutine, AdapterPattern

감사콩·2025년 10월 17일

유니티

목록 보기
5/29

서론

코루틴 기능에 대해 알아보고 활용해보고
디자인패턴 중 하나인 어댑터패턴을 알아보겠다.

Coroutine

유니티에서 함수의 실행을 일시중지하고, 원할 때 다시 실행할 수 있는 기능.
범용적으로 쓸 수 있는 개념이라 여러 코드에서 볼 수 있을 듯 하다.

특징

  • 일반 함수의 반환인 return 대신 yield 사용
  • yield return 시 일시 중지, 유니티에게 제어권을 반납, 다음 실행 시 중단점부터 이어 시작
  • 작업을 나누어 실행함으로서 비동기적 흐름 제어 가능.
  • 클래스 객체가 생성, 힙 메모리에 클래스 인스턴스가 할당됨(반드시 해제하여 메모리 누수 주의)
  • IEnumerator 를 반환.

IEnumerator

반복 가능 객체를 순회할 수 있는 기능 제공
foreach 루프나 코루틴에서 자주 사용됨.

IEnumerator numbers = new int[] (1, 2, 3).GetEnumerator()

GetEnumerator 가 IEnumerator 객체를 반환함.

주요 yield return

  1. yield return null - 한 프레임 뒤 이어서 실행(다른 변수명이 와도 null로 반환)
  2. yield return new WaitForSeconds(t) - t초 후 실행 재개
  3. yield return new WaitUntil(condition) - 조건이 참이 될 때까지 대기
  4. yield return new WaitWhile(condition) - 조건이 거짓이 될 때까지 대기

예시

void Start()
{
	StartCoruntine(PrintNumbers());
}

IEnumerator PrintNumbers());
{
	for (int i = 1; i < 5; i++
	{
    	Debug.Log(i);
    	yield return new WaitForSeconds(1f);
    }
}

Invoke

유니티에서 제공하는 시간 지연 실행 함수
특정 메서드를 일정 시간이 지난 뒤에 자동으로 호출하도록 예약하는 기능

장단점

장점

  • 간단하게 일정 시간 뒤 실행
  • Update()에서 직접 타이머 관리 필요 없음

단점

  • 메서드 이름을 문자열로 전달 -> 컴파일러 체크 불가
  • 흐름 제어 제한적(반복 이외엔 유연하지 못함)
  • 조건부 지연 실행, 여러 단계 지연같은 복잡한 로직엔 불편함

Coroutine과의 비교

구분코루틴 (Coroutine)인보크 (Invoke)
동작 방식함수 실행을 중간에 멈췄다가(yield) 다시 이어서 실행일정 시간이 지난 뒤 지정된 메서드를 호출
복잡도다양한 흐름 제어 가능 (반복, 조건, 여러 단계 지연 등)단순히 딜레이 후 메서드 실행
취소 방법StopCoroutine() 필요CancelInvoke() 필요
가독성yield로 여러 단계 동작을 직관적으로 표현 가능단발성 실행에는 간단



Adapter Pattern

서로 다른 인터페이스를 가진 클래스들을 함께 작동하게 하고 싶을 때 사용
기존 코드를 수정하지 않고 새 클래스나 라이브러리를 기존 시스템에 맞춰 연결할 때 유용.

사용 예시

  • 기존 코드 변경 불가하거나, 업데이트 시 기존 코드 내용 변경이 우려될 경우
  • 레거시 코드임에도 효율적일 경우

구성 요소

Target, Adaptee, Adapter 세가지 구성요소를 가진다.



마무리

코루틴 기능을 알아보고 Mobspawner 기능을 추가해보았다.

profile
안녕하시와요

0개의 댓글