html
JavaScript Promises ๋ง์คํฐํ๊ธฐ: ์ข ํฉ ๊ฐ์ด๋
๋ชฉ์ฐจ
- ์๊ฐ................................................. 3
- JavaScript์์ Promises ์ดํดํ๊ธฐ ..... 5
- Promise๋ ๋ฌด์์ธ๊ฐ?.................................. 6
- Promise ์ํ ......................................... 8
- Promises ์์ฑ ๋ฐ ์ฌ์ฉ ................. 10
- Promise ์์ฑํ๊ธฐ ................................ 11
- Promise ํด๊ฒฐ ์ฒ๋ฆฌ ................ 14
- Promise ๊ฑฐ์ ์ฒ๋ฆฌ ................ 17
- Promises ์ฒด์ด๋ ....................................... 20
- Promises์์์ ์ค๋ฅ ์ฒ๋ฆฌ ..................... 23
- ์ค์ฉ์ ์ธ ์์ ...................................... 26
- ๊ธฐ๋ณธ Promise ์์ .......................... 27
- Using .then and .catch ......................... 30
- ๊ฒฐ๋ก ..................................................... 34
- ์ถ๊ฐ ์๋ฃ ................................ 36
์๊ฐ
ํ๋ ์น ๊ฐ๋ฐ ๋ถ์ผ์์, JavaScript Promises๋ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ์ค์ํ ๊ฐ๋ ์ผ๋ก ๋ถ์ํ์ต๋๋ค. ์ด ๊ฐ์ด๋๋ Promises์ ๋ณต์ก์ฑ์ ๊น์ด ํํค์ณ ๊ทธ ์ค์์ฑ, ๊ธฐ๋ฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํด์ํฉ๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ๋์ ํ๋ ์ด๋ณด์์ด๋ , ๊ธฐ์ ์ ์ฌ์ ๋ฆฝํ๋ ค๋ ์๋ จ๋ ๊ฐ๋ฐ์์ด๋ ์ด ์ ์์ฑ ์ JavaScript Promises์ ๋ํ ์ฒด๊ณ์ ์ธ ํ๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Promises์ ์ค์์ฑ
๋น๋๊ธฐ ์์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ด๋ฉฐ, ๋คํธ์ํฌ ์์ฒญ, ํ์ผ ์ฒ๋ฆฌ, ์ฌ์ฉ์ ์ํธ์์ฉ๊ณผ ๊ฐ์ ์์ ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฉ์ถ์ง ์๊ณ ์ํํ ์ ์๊ฒ ํฉ๋๋ค. Promises๋ ์ด๋ฌํ ์์ ์ ์ํํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ๋ ๊น๋ํ ์ฝ๋์ ํฅ์๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ด์งํฉ๋๋ค.
์ด ๊ฐ์ด๋์ ๋ชฉ์
์ด ์ ์์ฑ ์ JavaScript Promises๋ฅผ ๋ช ํํ๊ฒ ์ค๋ช ํ๊ณ ์ค์ฉ์ ์ธ ์์ ์ ํฌ๊ด์ ์ธ ํต์ฐฐ์ ์ ๊ณตํฉ๋๋ค. ๋๊น์ง ์ฝ์ผ๋ฉด Promises์ ๋ํ ํ๊ณ ํ ์ดํด๋ฅผ ๊ฐ์ถ๊ฒ ๋์ด ํ๋ก์ ํธ์ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๊ฒ ๋ฉ๋๋ค.
Promises ์ฌ์ฉ์ ์ฅ๋จ์
์ฅ์ | ๋จ์ |
---|---|
๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋จ์ํ | ๊ณผ๋ํ ์ฒด์ด๋์ผ๋ก ๋ณต์กํด์ง ์ ์์ |
ํฅ์๋ ์ค๋ฅ ์ฒ๋ฆฌ | ์ฒ๋ฆฌ๋์ง ์์ Promise ๊ฑฐ์ ๊ฐ๋ฅ์ฑ |
์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ | ๋น๋๊ธฐ ๊ฐ๋ ์ ๋ํ ์ดํด ํ์ |
๋ ๋์ ์ ์ด ํ๋ฆ ์ด์ง | ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์ |
Promises๋ฅผ ์ธ์ ์ด๋์ ์ฌ์ฉํ ๊น
Promises๋ API์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํ์ผ ์ฝ๊ธฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ํ๊ณผ ๊ฐ์ด ์ง์ฐ๋ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ์์ ์ ์ด์์ ์ ๋๋ค. ์ฑ๊ณต๊ณผ ์คํจ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ช ํํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ์ฌ ๋ณต์กํ ๋น๋๊ธฐ ์ํฌํ๋ก์ฐ์ ์ ํฉํฉ๋๋ค.
JavaScript์์ Promises ์ดํดํ๊ธฐ
Promise๋ ๋ฌด์์ธ๊ฐ?
Promise๋ ๋น๋๊ธฐ ์์ ์ ์ต์ข ์๋ฃ ๋๋ ์คํจ๋ฅผ ๋ํ๋ด๋ JavaScript์ ๊ฐ์ฒด์ ๋๋ค. ์ด๋ ์ ํต์ ์ธ ์ฝ๋ฐฑ ํจ์์ ๋นํด ๋น๋๊ธฐ ์์ ์ ๋ณด๋ค ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
Promise ์ํ
Promise๋ ์ธ ๊ฐ์ง ์ํ ์ค ํ๋์ผ ์ ์์ต๋๋ค:
- Pending: ์ด๊ธฐ ์ํ, ์ดํ๋์ง๋ ๊ฑฐ์ ๋์ง๋ ์์ ์ํ.
- Fulfilled: ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์ํ.
- Rejected: ์์ ์ด ์คํจํ ์ํ.
์ด๋ฌํ ์ํ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํจ๊ณผ์ ์ธ Promise ์ฒ๋ฆฌ๋ฅผ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค.
Promises ์์ฑ ๋ฐ ์ฌ์ฉ
Promise ์์ฑํ๊ธฐ
Promise๋ฅผ ์์ฑํ๋ ค๋ฉด Promise ๊ฐ์ฒด๋ฅผ ์๋ก ์ธ์คํด์คํํ๊ณ , resolve ๋ฐ reject ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ํจ์๋ฅผ ์ ๋ฌํฉ๋๋ค. ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1 2 3 4 5 6 7 8 |
const demo = new Promise((resolve, reject) => { // ๋น๋๊ธฐ ์์
if (/* ์์
์ฑ๊ณต */) { resolve('Hello, Promise'); } else { reject('Promise Failed'); } }); |
์ค๋ช :
- new Promise: ์๋ก์ด Promise ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
- resolve: ์์ ์ด ์ฑ๊ณตํ์ ๋ ํธ์ถ๋ฉ๋๋ค.
- reject: ์์ ์ด ์คํจํ์ ๋ ํธ์ถ๋ฉ๋๋ค.
Promise ํด๊ฒฐ ์ฒ๋ฆฌ
Promise๊ฐ ์ดํ๋๋ฉด .then() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
1 2 3 |
demo.then((data) => { console.log(data); // ์ถ๋ ฅ: Hello, Promise }); |
๋จ๊ณ๋ณ ์ค๋ช :
- demo.then: ์ดํ ์ํ์ ๋ํ ํธ๋ค๋ฌ๋ฅผ ์ฒจ๋ถํฉ๋๋ค.
- console.log(data): ํด๊ฒฐ๋ ๊ฐ์ ์ฝ์์ ๋ก๊ทธํฉ๋๋ค.
Promise ๊ฑฐ์ ์ฒ๋ฆฌ
์คํจ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด .catch() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋๋ .then()์ ๋ ๋ฒ์งธ ํจ์๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
.catch() ์ฌ์ฉ:
1 2 3 4 5 6 7 |
demo .then((data) => { console.log(data); }) .catch((error) => { console.log(error); // ๊ฑฐ์ ์ ์ฒ๋ฆฌํจ }); |
.then()์ ๋ ๋ฒ์งธ ํจ์ ์ฌ์ฉ:
1 2 3 4 5 6 7 8 |
demo.then( (data) => { console.log(data); }, (error) => { console.log(error); // ๊ฑฐ์ ์ ์ฒ๋ฆฌํจ } ); |
๋ชจ๋ฒ ์ฌ๋ก: ๋ ๋์ ์ค๋ฅ ์ฒ๋ฆฌ์ ๊ฐ๋ ์ฑ์ ์ํด ์ผ๋ฐ์ ์ผ๋ก .catch()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
Promises ์ฒด์ด๋
Promise ์ฒด์ด๋์ ์ฌ์ฉํ๋ฉด ์ผ๋ จ์ ๋น๋๊ธฐ ์์ ์ ์์ฐจ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ๊ฐ .then()์ ์๋ก์ด Promise๋ฅผ ๋ฐํํ์ฌ ๋ค์ .then()์ด ์ด์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์๊ฒ ํฉ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 |
demo .then((data) => { console.log(data); return 'Next Step'; }) .then((message) => { console.log(message); // ์ถ๋ ฅ: Next Step }) .catch((error) => { console.log(error); }); |
์ค๋ช :
- ์ฒซ ๋ฒ์งธ .then(): ํด๊ฒฐ๋ ๊ฐ์ ๋ก๊ทธํ๊ณ 'Next Step'์ ๋ฐํํฉ๋๋ค.
- ๋ ๋ฒ์งธ .then(): 'Next Step'์ ๋ฐ์ ๋ก๊ทธํฉ๋๋ค.
- .catch(): ์ฒด์ธ์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ก์ต๋๋ค.
Promises์์์ ์ค๋ฅ ์ฒ๋ฆฌ
์ ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ ์ฒ๋ฆฌ๋์ง ์์ Promise ๊ฑฐ์ ์ ๋ฐฉ์งํ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
.catch() ์ฌ์ฉํ๊ธฐ
.catch() ๋ฉ์๋๋ Promise ์ฒด์ธ์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์บก์ฒํฉ๋๋ค.
1 2 3 4 5 6 7 8 |
demo .then((data) => { console.log(data); // ์ ์ฌ์ ์ผ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ์์
}) .catch((error) => { console.log('์ค๋ฅ:', error); }); |
์ฌ๋ฌ ์ค๋ฅ ์ฒ๋ฆฌํ๊ธฐ
์ฌ๋ฌ ๋น๋๊ธฐ ์์ ์ด ์๋ ๊ฒฝ์ฐ, ๊ฐ ์์ ์ ์ ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํ์ฌ ์ฐ์์ ์ธ ์คํจ๋ฅผ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
demo .then((data) => { return anotherAsyncOperation(data); }) .catch((error) => { console.log('์ฒซ ๋ฒ์งธ ์์
์์์ ์ค๋ฅ:', error); }) .then((result) => { return yetAnotherAsyncOperation(result); }) .catch((error) => { console.log('๋ ๋ฒ์งธ ์์
์์์ ์ค๋ฅ:', error); }); |
๊ถ์ฅ ์ฌํญ: ์ค๋ฅ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฉ๋ฆฌํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก Promise ์ฒด์ธ์ ์ ์คํ๊ฒ ๊ตฌ์กฐํํ์ญ์์ค.
์ค์ฉ์ ์ธ ์์
๊ธฐ๋ณธ Promise ์์
๋ค์์ Promise์ ์์ฑ ๋ฐ ์ฌ์ฉ์ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋จํ ์์ ์ ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const demo = new Promise((resolve, reject) => { // ๋น๋๊ธฐ ์์
์๋ฎฌ๋ ์ด์
setTimeout(() => { resolve('Hello, Promise'); // ๊ฑฐ์ ์ ์๋ฎฌ๋ ์ด์
ํ๋ ค๋ฉด ๋ค์ ์ค์ ์ฃผ์์ ํด์ ํ์ญ์์ค. // reject('Promise Failed'); }, 1000); }); demo.then((data) => { console.log(data); // ์ถ๋ ฅ: Hello, Promise }).catch((error) => { console.log(error); }); |
์ค๋ช :
- setTimeout: 1์ด์ ์ง์ฐ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
- resolve('Hello, Promise'): ์ง์ฐ ํ Promise๋ฅผ ์ดํํฉ๋๋ค.
- .then(): ํด๊ฒฐ๋ ๋ฉ์์ง๋ฅผ ๋ก๊ทธํฉ๋๋ค.
- .catch(): ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ๋ก๊ทธํฉ๋๋ค.
Using .then and .catch
์ด ์์ ๋ ์ฑ๊ณต ๋ฐ ์คํจ ์๋๋ฆฌ์ค๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
const demo = new Promise((resolve, reject) => { const success = true; // ๊ฑฐ์ ์ ํธ๋ฆฌ๊ฑฐํ๋ ค๋ฉด false๋ก ๋ณ๊ฒฝํ์ญ์์ค if (success) { resolve('Hello, Promise'); } else { reject('Promise Failed'); } }); demo .then((data) => { console.log(data); // ์ถ๋ ฅ: Hello, Promise // ์ถ๊ฐ ์ฒ๋ฆฌ }) .catch((error) => { console.log('์ค๋ฅ:', error); // ๊ฑฐ์ ์ ์ฒ๋ฆฌํจ }); |
๋จ๊ณ๋ณ ์ค๋ช :
- ์กฐ๊ฑด ๊ฒ์ฌ: Promise๋ฅผ ์ดํํ ์ง ๊ฑฐ์ ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
- .then(): ์ฑ๊ณต์ ์ผ๋ก ์ดํ๋์์ ๋ ์คํ๋ฉ๋๋ค.
- .catch(): Promise๊ฐ ๊ฑฐ์ ๋์์ ๋ ์คํ๋ฉ๋๋ค.
๊ฒฐ๋ก
JavaScript Promises๋ ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋๊ตฌ๋ก, ์ ํต์ ์ธ ์ฝ๋ฐฑ์ ๋นํด ๋ ๊น๋ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ๊ตฌ์กฐ, ์ํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์ค๋ฅ์ ๊ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํต์ฌ ์์ฝ
- Promises๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋จ์ํ: ์๊ฐ ์์๊ฐ ์๋ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ์ํ ์ดํด๋ ์ค์: Pending, Fulfilled, Rejected ์ํ์ ์ฐจ์ด๋ฅผ ์๋ ๊ฒ์ ํจ๊ณผ์ ์ธ Promise ์ฒ๋ฆฌ๋ฅผ ๋์ต๋๋ค.
- ์ฒด์ด๋์ ์ํฌํ๋ก์ฐ๋ฅผ ํฅ์: Promise ์ฒด์ด๋์ ์์ฐจ์ ์ธ ๋น๋๊ธฐ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํต๋๋ค.
- .catch()๋ฅผ ํตํ ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ: ์ ์ ํ ์ค๋ฅ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํจ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
Promises๋ฅผ ํ์ฉํ๋ฉด JavaScript ๊ฐ๋ฐ ๊ธฐ์ ์ด ํฅ์๋์ด ๋ ๋ฐ์์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด ๊ธฐ์ฌ๋ AI๊ฐ ์์ฑํ ๊ฒ์ ๋๋ค.