본문 바로가기
카테고리 없음

JavaScript Promise 객체 활용하기 - 효율적인 콜백 함수 축약법 5가지!

by excel-master 2025. 4. 17.
반응형
JavaScript Promise 객체 활용하기 - 효율적인 콜백 함수 축약법 5가지!

JavaScript에서 비동기 프로그래밍을 다루는 데 있어, Promise 객체는 매우 중요한 역할을 합니다. 전통적인 콜백 함수 방식은 가독성이 떨어지고, 복잡한 코드의 원인이 될 수 있습니다. 본 포스트에서는 Promise 객체의 활용 방법과 함께, 효율적인 콜백 함수 축약법을 다섯 가지 소개하겠습니다.

1. Promise 객체란?

Promise 객체는 비동기 작업의 결과를 나타내는 객체입니다. Pending, Fulfilled, Rejected의 세 가지 상태를 가질 수 있으며, 이를 통해 비동기 작업의 성공 또는 실패를 관리할 수 있습니다.

2. Promise의 기본 사용법

Promise를 사용하는 기본적인 구문은 다음과 같습니다:


let promise = new Promise((resolve, reject) => {
    // 비동기 작업
    if (성공) {
        resolve(결과);
    } else {
        reject(오류);
    }
});
    

이후, then()catch() 메소드를 사용하여 결과를 처리할 수 있습니다.

실용적인 팁 5가지

Tip 1: Promise.all() 활용하기

Promise.all() 메소드는 여러 개의 Promise를 동시에 실행할 때 유용합니다. 모든 Promise가 완료될 때까지 기다린 후 결과를 배열로 반환합니다. 이는 API 요청이나 파일 읽기 작업 등에서 효율성을 높이는 데 기여합니다.

Tip 2: async/await 구문 사용하기

async/await 구문을 사용하면 비동기 코드를 마치 동기 코드처럼 작성할 수 있습니다. 이렇게 하면 코드의 가독성을 대폭 향상시킬 수 있으며, 에러 처리도 간편해집니다.

Tip 3: Promise 체이닝으로 가독성 높이기

Promise 체이닝을 사용하면 여러 비동기 작업을 순차적으로 실행할 수 있습니다. 각 작업의 결과를 다음 작업에 전달할 수 있어, 복잡한 콜백 함수를 줄이고 코드의 가독성을 높일 수 있습니다.

Tip 4: 에러 핸들링 중앙 집중화

Promise 체이닝을 통해 에러 핸들링을 중앙에서 처리할 수 있습니다. 마지막에 catch() 메소드를 추가하여 모든 에러를 일괄적으로 처리할 수 있어, 코드의 안정성을 높이는 데 기여합니다.

Tip 5: Promise.race() 활용하기

Promise.race() 메소드는 여러 Promise 중 가장 먼저 완료된 결과를 반환합니다. 이는 타임아웃 처리나 여러 소스 중 가장 빠른 응답을 얻고자 할 때 유용합니다.

사례 1: API 요청 처리하기

다음은 여러 API 요청을 동시에 처리하는 예시입니다. Promise.all()을 사용하여 모든 요청이 완료될 때까지 기다립니다.


const fetchData1 = () => {
    return new Promise((resolve) => {
        setTimeout(() => resolve('데이터 1'), 1000);
    });
};

const fetchData2 = () => {
    return new Promise((resolve) => {
        setTimeout(() => resolve('데이터 2'), 1500);
    });
};

Promise.all([fetchData1(), fetchData2()])
    .then((results) => {
        console.log(results); // ['데이터 1', '데이터 2']
    });
    

사례 2: 비동기 함수와 async/await 사용하기

async/await을 사용하여 비동기 코드를 동기적으로 실행하는 예시입니다. 이는 코드의 흐름을 쉽게 이해할 수 있도록 도와줍니다.


const fetchData = async () => {
    const result1 = await fetchData1();
    const result2 = await fetchData2();
    console.log(result1, result2); // '데이터 1', '데이터 2'
};

fetchData();
    

사례 3: Promise 체이닝으로 순차적으로 작업하기

Promise 체이닝을 통해 순차적으로 비동기 작업을 수행하는 예시입니다. 이를 통해 중첩된 콜백을 방지할 수 있습니다.


fetchData1()
    .then(result => {
        console.log(result); // '데이터 1'
        return fetchData2();
    })
    .then(result => {
        console.log(result); // '데이터 2'
    });
    

요약 및 실천 팁


JavaScript의 Promise 객체를 활용하면 비동기 작업을 훨씬 더 효율적으로 관리할 수 있습니다. 위에서 설명한 Promise.all(), async/await, Promise 체이닝 등을 활용하여 코드의 가독성과 유지보수성을 높일 수 있습니다. 실전에서 이 팁들을 적용해 보세요!

반응형