ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 16주차 3일 기술 면접 대비
    개발일지/스파르타 코딩클럽 부트캠프 2024. 8. 1. 09:59

     

    💡 질문에 답해보고 직접 확인해보는 시간을 가집시다.

     

    1. InvokeRepeating을 통해 반복 실행 중인 메서드는 오브젝트를 비활성화하면 멈출까요?
    2. Coroutine을 통해 반복 실행 중인 메서드는 오브젝트를 비활성화하면 멈출까요?
    3. 다음 Coroutine 코드의 성능 상 문제는 무엇이 있을까요? (Hint : 메모리)
    IEnumerator Fade()
    {
        Color c = renderer.material.color;
        for (float alpha = 1f; alpha >= 0; alpha -= 0.1f)
        {
            c.a = alpha;
            renderer.material.color = c;
            yield return new WaitForSeconds(.1f);
        }
    }

     

    4. Unity의 Coroutine은 비동기 동작일까요? 비동기 동작이라면 하나의 스레드에서 동작하지 않는걸까요?

     

    1번 답 :

    InvokeRepeating은 오브젝트가 비활성화되면 함께 멈춘다. 다시 활성화 된다고 해도 재개되진 않는다.

     

    2번 답 :

    코루틴도 마찬가지로 오브젝트가 비활성화되면 멈추게되며, 다시 활성화 시에 재개되지 않기 때문에 다시 활성화 해줄 때 다시 코루틴을 시작시켜줄 필요가 있다.

     

    3번 답 :

    딜레이를 만들어주는 yield return에서 코루틴이 실행될 때마다 new WaitForSeconds를 통해 생성을 해주고 있으므로 메모리에 부하가 올 수 있다. 따라서 WaitForSeconds를 변수로 만들어서 사용해주면 좋다.

     

    4번 답 :

    유니티의 코루틴은 비동기 동작이다. 비동기 동작이며 기본적으로 멀티 스레드가 아닌 단일 스레드에서 동작한다. 코루틴은 비동기 동작이지만 마치 동기처럼 동시에 동작하는 것 처럼 보인다. 실제로는 메인 스레드의 연속적인 흐름을 중단시키지 않고 각 프레임에서 조금씩 작업을 나누어서 처리한다. 여기서 중요한 점은 코루틴이 메인 스레드에서만 실행된다는 점이다. 이는 코루틴이 실행되는 동안 다른 유니티 엔진의 작업들과 함께 하나의 스레드에서 처리된다는 뜻이다.

     

     

    설명 문제

     💡 질문을 직접 설명해보고, 모르는 부분이 있다면 알아보는 시간을 가집시다.

     

    1. 코루틴의 동작원리와 사용해본 예시를 함께 설명해주세요.
    2. Invoke와 코루틴의 차이에 대해 설명해주세요.
    3. 코루틴과 멀티쓰레딩은 어떤 차이가 있는지 설명해주세요.

    1번 답 :

    위 4번 답에 포함,

    사용 예시 : UI 애니메이션, 시간 차 데미지, 데미지 인디케이터 등

     

    2번 답 :

    인보크와 코루틴은 기본적으로 특정 기능에 딜레이를 주거나 일정 간격으로 반복 호출을 하는데 사용된다.

    인보크와 코루틴의 차이점으로는

    유연성 : 코루틴은 지연 및 재개 시점을 유연하게 설정할 수 있지만, 인보크는 고정된 시간, 간격에만 실행할 수 있다.

    제어 : 코루틴은 yield를 통해 반복 중지 및 재개를 제어할 수 있고, StopCoroutine을 통해서 명시적으로 중지할 수 있다. 하지만 인보크는 설정된 시간으로 자동 실행되며 중간에 제어가 어렵다.

    인보크는 단순히 일정 시간 후에 작업을 수행하거나 반복 작업을 수행할 때 유용하며, 코루틴은 게임 루프 내에서 비동기적 작업을 처리하거나, 특정 조건에서 일시적으로 작업을 중지해야 할 때 적합하다.

     

    3번 답 :

    코루틴과 멀티쓰레딩은 둘 다 비동기 작업을 처리하는 방식이다.

    일단 코루틴은 싱글 스레드이며 유니티의 메인스레드에서만 작동한다. 이는 코드를 중단하고 특정 조건이나 시간이 지난 후에 다시 재개할 수 있는 기능을 제공하며, 특정 시점에서 중지하고 다음 프레임에서 다시 시작할 수 있다.

    멀티 스레딩은 여러개의 스레드를 사용하여 병렬로 작업을 처리하는 방식이다. 각 스레드는 독립적으로 실행된다.

     

Designed by Tistory.