Skip to content

Commit 51fe716

Browse files
authored
docs: 챕터 9 추가 (#72)
1 parent 2b799bb commit 51fe716

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

챕터_9/백지연.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# CHAPTER 09 비동기 프로그래밍 패턴
2+
3+
비동기 자바스크립트 프로그래밍은 다른 코드를 실행하는 동안 백그라운드에서 오래 걸리는 작업을 수행하게 해줌
4+
`Promise`, `async/await` 개념은 메인 스레드를 차단하지 않으면서도 코드를 깔끔하고 읽기 쉽게 만들어줌
5+
6+
## 비동기 프로그래밍
7+
8+
동기 코드는 블로킹 방식으로 실행됨 = 한 번에 한 문장씩 코드가 순서대로 실행됨
9+
**비동기 코드는 논블로킹 방식으로 실행됨** = 다른 작업을 기다리는 동안 백그라운드에서 비동기 코드 실행
10+
11+
코드의 나머지 부분을 차단하지 않고, 오래 실행되는 작업을 수행할 때 유용
12+
ex. 네트워크 요청, 데이터베이스 읽기/쓰기, 입력/출력 작업
13+
14+
## 배경
15+
16+
### 콜백 함수
17+
18+
다른 함수에 인수로 전달되어, 비동기 작업이 완료된 후 실행됨
19+
네트워크 요청, 사용자 입력 등 비동기 작업의 결과를 처리하기 위해 사용됨
20+
콜백 지옥을 초래할 수 있다는 게 단점
21+
22+
## 프로미스 패턴
23+
24+
프로미스는 비동기 작업의 결과를 나타내는 객체
25+
`pending`, `fulfilled`, `rejected` 상태를 가질 수 있음
26+
27+
`Promise` 생성자는 함수를 인수로 받고, 이 함수는 `resolve``reject`를 인수로 전달받음
28+
비동기 작업이 성공적으로 완료되었을 때 `resolve` 호출, 실패했을 때 `reject` 호출
29+
30+
```javascript
31+
return new Promise((resolve, reject)) => {
32+
fetch(url)
33+
.then(response => response.json())
34+
.then(data => resolve(data))
35+
.catch(error => reject(error));
36+
};
37+
```
38+
39+
- 프로미스 에러 처리 : `catch` 메서드
40+
- 프로미스 병렬 처리 : `Promise.all` 메서드
41+
- 프로미스 순차 실행 : `Promise.resolve` 메서드
42+
- 프로미스 메모이제이션 : 캐시를 사용해 프로미스 함수 호출 결과 저장하고 중복 요청 방지
43+
- 프로미스 데코레이터 : 고차 함수로 데코레이터를 생성해 프로미스에 추가 기능 부여
44+
- 프로미스 경쟁 : `Promise.race` 메서드로 여러 프로미스를 동시에 실행하고 가장 먼저 완료되는 프로미스의 결과 반환
45+
46+
## async/await 패턴
47+
48+
비동기 코드를 마치 동기 코드처럼 작성할 수 있음
49+
`await` 키워드는 `fetch` 호출이 완료될 때까지 함수 실행을 일시 중지함
50+
51+
- 비동기 반복 : [for-await-of](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for-await...of) 반복문을 사용해 반복 가능 객체를 순회
52+
- 비동기 에러 처리 : `try-catch` 블록
53+
- 비동기 병렬 : `Promise.all` 메서드
54+
- 비동기 순차 실행 : `Promise.resolve` 메서드
55+
- 비동기 메모이제이션 : 캐시를 사용해 비동기 함수 호출 결과 저장하고 중복 요청 방지
56+
- async/await 데코레이터 : 고차 함수로 데코레이터를 생성해 비동기 함수에 추가 기능 제공
57+
58+
> 자바스크립트 데코레이터
59+
> https://github.com/tc39/proposal-decorators
60+
> 현재는 표준이 아니기 때문에 바벨로 트랜스파일하거나 타입스크립트를 사용해야 합니다.
61+
62+
> 바벨로 데코레이터 사용하기
63+
> https://babeljs.io/docs/babel-plugin-proposal-decorators
64+
> https://www.youtube.com/watch?v=9SuuHi7qk24
65+
>
66+
> ```json
67+
> // babel.config.json
68+
> {
69+
> "presents": ["@babel/preset-env"],
70+
> "plugins": [["@babel/plugin-proposal-decorators", { "version": "2023-11" }]]
71+
> }
72+
> ```
73+
74+
> 타입스크립트에서 데코레이터 사용하기
75+
> https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#decorators
76+
> https://blog.logrocket.com/practical-guide-typescript-decorators

0 commit comments

Comments
 (0)