2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

비동기 프로그래밍에서 'promise'의 상태 변화는 어떻게 이루어지나요?

_____
Q: 비동기 프로그래밍에서 Promise의 상태 변화는 어떻게 이루어지나요?

A: Promise는 자바스크립트에서 비동기 작업의 완료 또는 실패를 처리하기 위한 객체로, 세 가지 상태(state)를 갖습니다.

1. 대기(pending)
- 초기 상태입니다. 비동기 작업이 아직 완료되지 않았을 때의 상태입니다.
- 이 상태에서 Promise는 "결과"도, "실패 이유"도 갖고 있지 않습니다.

2. 이행(fulfilled, 혹은 resolved)
- 비동기 작업이 성공적으로 완료되면 해당 상태로 전환됩니다.
- Promise는 값을 "이행값(fulfilled value)"으로 저장하며, 이행값은 후속 `.then()` 핸들러로 전달됩니다.
- 상태가 이행으로 변하면 더 이상 다른 상태로 변경되지 않습니다.

3. 거부(rejected)
- 비동기 작업이 실패하거나 오류가 발생하면 이 상태로 전환됩니다.
- Promise는 실패 이유 또는 에러 객체를 저장하며, 이는 `.catch()` 핸들러로 전달됩니다.
- 상태가 거부로 변하면 더 이상 다른 상태로 변경되지 않습니다.

상태 변화 요약:
- Promise는 pending → fulfilled 또는 pending → rejected 중 하나의 경로로 상태가 변경됩니다.
- 한 번 상태가 완료(fulfilled 또는 rejected)로 변경되면, 다시는 상태가 변하지 않고 고정됩니다.
- 이 상태 불변성은 Promise가 신뢰할 수 있는 비동기 처리를 가능하게 하는 핵심 특징입니다.

예시 코드:
```javascript
const promise = new Promise((resolve, reject) => {
// 초기에는 pending 상태
setTimeout(() => {
resolve('성공 결과'); // 상태가 fulfilled로 변함
// 또는 reject('실패 이유'); // 상태가 rejected로 변함
}, 1000);
});

promise.then(value => {
console.log('이행:', value);
}).catch(error => {
console.error('거부:', error);
});
```

요약하면, Promise의 상태 변화는 `pending`에서 시작하여 작업 성공 시 `fulfilled`, 실패 시 `rejected`로 불변하게 전환되며 이를 기반으로 후속 작업을 처리하게 됩니다.
<a href='https://sangseek.com/sangseeks/비동기 프로그래밍/ko'>비동기 프로그래밍</a>에서 'Promise'는 JavaScript에서 비동기 작업의 완료 또는 실패를 나타내는 객체입니다. Promise는 세 가지 상태를 가질 수 있으며, 이 상태는 비동기 작업의 진행 상황을 나타냅니다. Promise의 상태 변화는 다음과 같은 방식으로 이루어집니다. Promise의 상태 1. 대기(Pending) : Promise가 생성된 직후의 상태입니다. 이 상태에서는 비동기 작업이 아직 완료되지 않았으며, 결과를 기다리고 있는 상태입니다. 2. 이행(Fulfilled) : 비동기 작업이 성공적으로 완료되었을 때의 상태입니다. 이 상태로 변화하면, Promise는 결과값을 가지고 있으며, 이 결과값은 `then()` 메서드를 통해 접근할 수 있습니다. 3. 거부(Rejected) : 비동기 작업이 실패했을 때의 상태입니다. 이 상태로 변화하면, Promise는 오류 정보를 가지고 있으며, 이 오류는 `catch()` 메서드를 통해 처리할 수 있습니다. 상태 변화의 과정 Promise의 상태 변화는 다음과 같은 과정을 통해 이루어집니다: 1. Promise 생성 : Promise는 `new Promise(executor)` 구문을 통해 생성됩니다. 이때 `executor`는 두 개의 인자를 받는 함수로, 첫 번째 인자는 이행을 위한 함수(`resolve`), 두 번째 인자는 거부를 위한 함수(`reject`)입니다. ```javascript const myPromise = new Promise((resolve, reject) => { // 비동기 작업 수행 }); ``` 2. 비동기 작업 수행 : Promise 내부에서 비동기 작업이 수행됩니다. 이 작업이 성공적으로 완료되면 `resolve` 함수를 호출하여 이행 상태로 변화시키고, 실패하면 `reject` 함수를 호출하여 거부 상태로 변화시킵니다. ```javascript const myPromise = new Promise((resolve, reject) => { setTimeout(() => { const success = true; // <a href='https://sangseek.com/sangseeks/예시/ko'>예시</a> 조건 if (success) { resolve("작업 성공"); } else { reject("작업 실패"); } }, 1000); }); ``` 3. 상태 변화 : `resolve` 또는 `reject`가 호출되면 Promise의 상태가 각각 이행 또는 거부로 변화합니다. 이 상태 변화는 비동기적으로 발생하며, 상태가 한 번 변화하면 다시 변경될 수 없습니다. 즉, Promise는 최종적으로 이행 또는 거부 상태로 고정됩니다. 4. 결과 처리 : Promise의 상태가 변화한 후, `then()`과 `catch()` 메서드를 사용하여 결과를 처리할 수 있습니다. `then()`은 이행 상태에서 호출되며, `catch()`는 거부 상태에서 호출됩니다. ```javascript myPromise .then(result => { console.log(result); // "작업 성공" }) .catch(error => { console.error(error); // "작업 실패" }); ``` Promise의 체이닝 Promise는 체이닝이 가능하여, 여러 개의 비동기 작업을 순차적으로 처리할 수 있습니다. 각 `then()` 메서드는 새로운 Promise를 반환하므로, 다음 `then()` 메서드를 호출할 수 있습니다. ```javascript myPromise .then(result => { console.log(result); return new Promise((resolve) => { setTimeout(() => resolve("다음 작업 성공"), 1000); }); }) .then(nextResult => { console.log(nextResult); // "다음 작업 성공" }) .catch(error => { console.error(error); }); ``` 결론 Promise는 비동기 프로그래밍에서 작업의 상태를 관리하고, 결과를 처리하는 데 매우 유용한 도구입니다. Promise의 상태 변화는 대기, 이행, 거부의 세 가지 상태로 이루어지며, 각 상태에 따라 적절한 메서드를 통해 결과를 처리할 수 있습니다. 이러한 구조는 비동기 작업을 보다 직관적이고 관리하기 쉽게 만들어 줍니다.
작성자: 박서영 [비회원] | 작성일자: 1년 전 2024-09-12 16:03:48
조회수: 126 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.