[javascript] 다른 비동기 패턴과 프로미스의 비교

비동기 프로그래밍은 여러 가지 패턴을 사용하여 처리할 수 있다. 그러나 이러한 패턴은 코드가 복잡해지고 유지보수가 어려워지는 문제를 가지고 있을 수 있다. 이러한 문제를 해결하기 위해 ECMAScript 6부터 프로미스가 도입되었다. 프로미스는 비동기 작업을 좀 더 간결하고 사람이 이해하기 쉬운 방식으로 처리할 수 있도록 도와준다.

콜백 패턴

가장 기본적인 비동기 패턴은 콜백 패턴이다. 콜백 함수를 사용하여 비동기 작업이 완료되었을 때 호출되도록 할 수 있다. 하지만 콜백 패턴은 콜백 안에 또 다른 콜백을 중첩시키는 콜백 지옥(callback hell) 문제가 발생할 수 있다. 이로 인해 코드의 가독성이 떨어지고 디버깅과 오류 처리가 어려워진다.

setTimeout(function() {
    console.log("비동기 작업 완료");
}, 1000);

이벤트 리스너 패턴

이벤트 리스너 패턴은 비동기 이벤트를 처리하는데 사용된다. 이벤트가 발생하였을 때, 미리 등록된 이벤트 리스너 함수가 호출된다. 이 패턴은 콜백 패턴과 비슷한 문제를 가지고 있다. 이벤트 리스너를 중첩시키는 경우 코드 복잡성이 증가할 수 있다.

eventEmitter.on('complete', function() {
    console.log("비동기 작업 완료");
});

eventEmitter.emit('complete');

프로미스 패턴

프로미스는 비동기 작업을 객체로 감싸서 처리하는 패턴이다. 프로미스는 성공한 경우와 실패한 경우에 대한 처리를 분리하고, 콜백 함수를 중첩하지 않고도 비동기 작업을 순차적으로 처리할 수 있다. 또한 프로미스 체이닝을 통해 여러 비동기 작업을 연결하여 처리할 수 있다.

const promise = new Promise(function(resolve, reject) {
    setTimeout(function() {
        resolve("비동기 작업 완료");
    }, 1000);
});

promise.then(function(result) {
    console.log(result);
});

프로미스의 이점

결론

프로미스는 콜백 패턴과 이벤트 리스너 패턴과 같은 다른 비동기 패턴들과 비교했을 때 많은 이점을 가지고 있다. 프로미스를 사용하면 가독성이 향상되고 코드의 복잡성이 줄어들며, 비동기 작업의 오류 처리와 여러 작업의 순차 처리가 쉬워진다. 따라서 프로미스는 오늘날 비동기 프로그래밍의 주요한 패턴으로 사용되고 있다.

참고 자료: