Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트에서 Deferred, Promise, Future의 차이점 완벽 정리

Future는 Promise의 옛 이름

Future(선물)는 오래전부터 사용되던 용어로, 사실상 Promise(프라미스)와 같은 개념을 가리킵니다. 두 용어는 비동기 연산의 결과를 나타낸다는 점에서 동일한 의미를 지니며, 시대에 따라 명칭만 달라진 것입니다.

Promise와 Deferred의 차이

  • Promise(프라미스)는 아직 알 수 없는 값을 대표하는 객체입니다. 쉽게 말해, 프라미스가 생성되는 시점에는 그 값이 확정되어 있지 않을 수 있으며, 프라미스는 미래에 결정될 값의 대리자(proxy) 역할을 합니다.

  • Deferred(디퍼드)는 아직 완료되지 않은 작업 자체를 의미합니다. 일반적으로 Deferred는 Promise를 확장한 형태이며, 스스로를 resolve(해결)할 수 있다는 점이 핵심적인 차이입니다. 반면 Promise 객체 자체는 직접 resolve할 수 없는 경우가 많습니다. 이러한 특성 때문에 Deferred는 '성공만을 약속하는 프라미스'라고 생각할 수도 있습니다.

핵심 요약

정리하면 다음과 같습니다:

  • Promise는 결과값의 자리 표시자(placeholder), 즉 처음에는 알려지지 않은 결과를 담는 그릇입니다.

  • Deferred는 그 결과값을 만들어내는 연산(computation) 자체를 대표합니다.

즉, Deferred가 계산을 진행하고 완료되는 순간, 그 결과가 Promise에 들어 담기는 관계라고 이해하면 됩니다. 비동기 코드를 설계할 때 이 두 개념의 역할 구분을 명확히 하면, 더 깔끔하고 유지보수하기 좋은 코드를 작성할 수 있습니다.