Study/TIL(Today I Learned)

24.11.21 Node.js, Unity

에린_1 2024. 11. 21. 22:08
728x90

Node.js

Promise

  • 비동기 작업을 처리하기 위해 사용되는 객체이다. 비동기 코드를 더 이해하기 쉽게 작성하고, 콜백 지옥을 피하기 위해 도입되었다.

Promise란?

  • 자바스크립트에서 비동기 작업의 결과를 나타내는 객체로, 결과값을 아직 사용 불가능한 시점과 결과가 사용 가능한 시점을 쉽게 관리할 수 있게 한다. Promise는 아래와 같은 세 가지 상태를 가질 수 있다.
    • Pending : 초기 상태로, 비동기 작업이 아직 완료되지 않은 상태이다.
    • Fulfilled : 작업이 성공적으로 완료된 상태이며, 결과 값(value)가 존재한다.
    • Rejected : 작업이 실패한 상태이며, 오류(reason)가 존재한다.
  • Promise는 상태가 변경되면 해당 상태로 연결된 처리기(handler)가 호출된다.

Promise의 생성 및 사용

  • Promise는 생성자 함수와 콜백을 사용하여 생성한다. 콜백 함수는 두 가지 매개변수를 받는다.
  • 비동기 작업이 성공하면 resolve를 호출하고, 실패하면 reject를 호출하여 상태를 변경한다.

체이닝과 then, catch 사용

  • Promise는 체이닝을 통해 비동기 작업을 순차적으로 처리할 수 있으며, 이를 위해 then과 catch 메서드를 사용한다.
    • then(onFulfilled) : Promise가 Fulfilled 상태가 되었을 때 호출되는 콜백 함수를 등록한다. then은 체이닝이 가능하여 여러 비동기 작업을 순차적으로 처리할 수 있다.
    • catch(onRejected) : Promise가 Rejected 상태가 되었을 때 호출되는 콜백 함수를 등록한다. 오류가 발생했을 때 이를 처리한다.

finaㅣly 메서드

  • finally() 메서드는 Promise가 Fulfilled 또는 Rejected 상태가 되었을 때 항상 실행된다.

Promise의 장점과 단점

  • 장점
    • 콜백 지옥 해결 : 콜백 함수의 중첩으로 인한 코드 가독성 문제를 체이닝을 통해 해결할 수 있다.
    • 비동기 흐름 제어 : then과 catch를 사용하여 비동기 코드의 흐름을 쉽게 제어할 수 있다.
    • 오류 처리 : catch 메서드를 통해 비동기 작업 중 발생하는 오류를 체계적으로 처리할 수 있다.
  • 단점
    • 복잡한 체이닝 : 비동기 작업의 체이닝이 길어질 경우 코드가 여전히 복잡해질 수 있다. 이는 이후 도입된 async/await으로 해결할 수 있다.
    • 디버깅 어려움 : 여러 비동기 작업을 체인으로 연결할 경우, 오류가 발생했을 때 디버깅이 어려울 수 있다.

체이닝

  • Promise 객체를 사용하여 여러 비동기 작업을 순차적으로 연결하는 방식이다. 한 비동기 작업이 완료된 후 그 다음 비동기 작업을 수행하는 방식으로, 이러한 연결된 작업들을 순서대로 실행하는 방법을 체이닝이라고 한다.

Unity

코루틴(Coroutine)

  • 특정 작업을 여러 프레임에 걸쳐 실행할 수 있도록 지원하는 기능이다.
  • Unity에서 시간 지연이나 비동기적 작업을 쉽게 처리할 수 있게 해주며, 주로 애니메이션, 타이머, 지연 실행 같은 작업에서 많이 사용된다.
  • 일반적인 함수와 달리, 호출 시 즉시 종료되지 않고 중간에 실행을 멈추고 나중에 다시 재개될 수 있는 함수이다. Unity에서는 주로 특정 지연 작업이나 프레임 기반의 반복 작업을 처리할 때 코루틴을 사용한다.
  • C#에서는 IEnumerator를 반환하는 함수로 코루틴을 구현하며, 이 함수는 특정 시점에서 실행을 멈추고 다음 프레임 또는 지정된 시간이 지나면 다시 실행된다.

특징

  • 비동기적 실행 : 다른 작업을 블로킹 하지 않고 비동기적으로 실행되므로, 프레임 드롭없이 지연이나 반복 동작을 처리할 수 있다.
  • 중단 및 재개 : yield 키워드를 사용하여 코루틴을 특정 시점에서 중단하고, 이후 조건이 충족되면 재개할 수 있다.
  • 메인 스레드 : 코루틴은 Unity의 메인 스레드에서 실행되므로, Unity 엔진 API에 안전하게 접근할 수 있다.

코루틴의 장점과 단점

  • 장점
    • 간결한 비동기 코드 : 코루틴을 사용하면 시간 지연이나 반복적인 비동기 작업을 간결하게 표현할 수 있다.
    • 가독성 향상 : 비동기적 작업을 콜백 대신 순차적 코드로 표현할 수 있어 코드 가독성이 높아진다.
    • Unity 엔진과 통합 : 코루틴은 Unity의 메인 스레드에서 실행되므로 Unity의 객체와 안전하게 상호작용할 수 있다.
  • 단점
    • 메인 스레드 사용 : 메인 스레드에서 실행되므로, 긴 작업을 코루틴으로 처리하면 프레임 드롭이 발생할 수 있다. 무거운 연산은 별도의 스레드를 사용하는 것이 바람직하다.
    • 수동 관리 필요 : 코루틴을 실행하면, 수동으로 중단하거나 조건을 관리해야 하는 경우가 많아 관리가 복잡해질 수 있다.
    • 의존성 증가 : 코루틴은 Unity 환경에 의존적이기 때문에, 다른 엔진이나 플랫폼에서 코드의 재사용성이 낮다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.11.23 C++  (0) 2024.11.23
24.11.22 JavaScript, C++  (0) 2024.11.22
24.11.20 CS  (0) 2024.11.20
24.11.19 CS  (0) 2024.11.19
24.11.18 CS  (1) 2024.11.18