LazyPromise: 새로운 API를 배우기 싫은 사람들을 위한 타입드 에러 및 취소 가능성
2025-02-16 03:17:58LazyPromise: 새로운 JavaScript 비동기 처리 혁신
JavaScript 비동기 처리를 이야기할 때면 Promise와 Observable이라는 두 가지 강력한 도구를 떠올리게 됩니다. 그러나 이제 이 두 비동기 처리 기법에서 영감을 받은 LazyPromise라는 새로운 방식이 주목받고 있습니다. LazyPromise는 Promise의 API 형태와 Observable의 게으름 및 취소 가능성을 물려받아, 비동기 처리를 더욱 유연하고 강력하게 만들어줍니다. 더불어, 타입드 에러라는 독특한 특성을 가지고 있어 에러 처리를 더 명확하게 합니다.
Promise와 LazyPromise의 차이점
LazyPromise는 일반적인 Promise와 비슷하지만 몇 가지 큰 차이점이 있습니다:
- 타입드 에러 지원: LazyPromise는 에러 타입을 정의할 수 있어, 에러 처리 시 타입 안정성을 제공합니다.
- 지연 및 취소 가능: 일반 Promise는 즉시 실행되지만, LazyPromise는 명시적으로 구독하기 전까지 실행되지 않으며, 중간에 취소할 수 있습니다.
- 즉각적 방출: 결과를 동기적으로 방출합니다. 이는 마이크로태스크 큐에서 실행되는 일반 Promise와의 큰 차이점입니다.
LazyPromise 생성과 사용
LazyPromise는 createLazyPromise 함수를 사용하여 생성합니다. 이 함수는 Promise 생성자와 비슷하지만, 해제 함수를 반환할 수 있다는 점이 특징입니다. 예를 들어 다음과 같은 코드로 LazyPromise를 만들 수 있습니다:
const lazyPromise = createLazyPromise<0, "oops">((resolve, reject) => {
const timeoutId = setTimeout(() => {
if (Math.random() > 0.5) {
resolve(0);
} else {
reject("oops");
}
}, 1000);
return () => {
clearTimeout(timeoutId);
};
});
LazyPromise는 구독하기 전까지는 아무 작업도 하지 않습니다. 구독을 통해 결과를 받을 수 있으며, 간단히 다음처럼 호출합니다:
const unsubscribe = lazyPromise.subscribe(handleValue, handleError);
LazyPromise의 마법: 취소 가능성과 타입드 에러
LazyPromise의 강점은 그 게으름과 취소 가능성에 있습니다. 구독자가 0이 되기 전에 무언가를 실행하고 싶다면, 이를 조정할 수 있습니다. 구독자가 없어지면 LazyPromise는 자동으로 초기 상태로 돌아갑니다.
타입드 에러를 통해 에러 처리의 명확성을 높일 수 있습니다. LazyPromise에서는 명시적 에러 처리를 요구하며, 이는 코드에서 에러의 흐름과 그 의미를 명확히 해줍니다. 또한, fail을 사용하여 '실패' 상태를 명시할 수 있습니다.
const lazyPromise = createLazyPromise((resolve, reject, fail) => {
setTimeout(() => {
try {
...
} catch (error) {
fail();
throw error;
}
});
});
lazyPromise.subscribe(handleValue, handleError, handleFailure);
Observable과의 비교
Observable은 여러 값을 발행할 수 있는 것과 달리, LazyPromise는 한 번의 값만 발행할 수 있습니다. 이는 복잡한 의존성 그래프를 단순화하고, 비동기 처리에 집중하게 만듭니다. Observable에서 존재할 수 있는 동기 재진입 문제가 LazyPromise에는 존재하지 않습니다.
LazyPromise의 단점 및 아쉬운 점
LazyPromise를 도입할 때 고려해야 할 부분도 있습니다. 가장 큰 단점은 async/await 구문을 사용할 수 없다는 점입니다. 이로 인해 일부 개발자에게는 불편함으로 다가올 수 있습니다. 그러나 LazyPromise는 그 자체로 새로운 패러다임을 제공하며, 기존의 비동기 처리와는 다른 장점을 제공합니다.
참고 문서: LazyPromise Documentation
위의 내용에서는 LazyPromise의 특징과 기존 Promise 및 Observable과의 차이점을 자세히 설명했습니다. 이 글을 통해 LazyPromise의 기본 개념과 사용 방법을 이해하고, 여러분의 프로젝트에 더 나은 비동기 처리를 도입하시기 바랍니다.