Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions week6_SOHYUN/week6_SOHYUN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
## Q1.

프로미스의 후속 처리 메서드(`then`, `catch`, `finally`)의 콜백 함수는 ______ **큐**에 저장되고, 이 큐는 **태스크 큐보다 ( ) 순위로 실행된다.**

- 답

마이크로태스크 / 높은

<45.7>

프로미스의 후속 처리 메서드의 콜백 함수는 태스크 큐가 아니라 마이크로 태스크 큐에 저장!!!!!

마이크로태스크 큐는 태스크 큐보다 우선순위가 높음


## Q2.

다음 중 **`Promise`의 상태 변화에 대한 설명으로 옳지 않은 것**은?

1. `pending` 상태는 **비동기 처리가 아직 수행되지 않은 상태**이다.
2. `resolve` 함수가 호출되면 `fulfilled` 상태로 변한다.
3. `reject` 함수가 호출되면 `rejected` 상태로 변한다.
4. 한 번 `fulfilled`가 된 프로미스는 다시 `pending` 상태로 돌아갈 수 있다.

- 답

4번

<45.2 >

![스크린샷 2025-12-02 오후 4.41.54.png](attachment:262e1808-854a-4684-acfe-d71f2de1c07c:스크린샷_2025-12-02_오후_4.41.54.png)

프로미스는 pending → fulfiiled or pending → rejected의 상태 변경만 가능!

한 번 settled된 이후에는 상태가 변경되지 않음.


## Q3.

다음 실행 결과는?

```jsx
setTimeout(() => console.log('timeout'));
Promise.resolve().then(() => console.log('promise'));
console.log('sync');
```

- 답

```jsx
sync
promise
timeout
```

<45.7>

프로미스의 후속 처리 메서드는 **마이크로태스크 큐**에 저장되어 일반 태스크 큐(매크로태스크)보다 **먼저 실행된다.**

따라서 실행 순서: 동기 → 마이크로태스크 → 매크로태스크

| 실행 순서 | 코드 | 큐 종류 | 실행 시점 |
| --- | --- | --- | --- |
| 1 | `console.log('sync')` | — (동기 코드) | 즉시 실행 |
| 2 | `Promise.resolve().then(...)` | 마이크로태스크 큐 | 콜 스택 비워진 후 즉시 |
| 3 | `setTimeout(...)` | 태스크 큐 (매크로태스크) | 모든 마이크로태스크 완료 후 |
1. `setTimeout()` 등록
- setTimeout의 콜백은 비동기 함수이기 때문에 즉시 실행되지 않고 태스크 큐에 등록
- 타이머가 만료된 뒤, 콜 스택이 비어있으면 실행될 예정
2. `Promise.resolve()` 실행
- `Promise.resolve()`는 즉시 **fulfilled** 상태의 프로미스를 반환한다.
- `.then()`에 등록된 콜백은 **마이크로태스크 큐(Microtask Queue)** 에 저장된다.
3. `console.log('sync')` 실행
- 동기 코드이므로 즉시 실행된다.
- 현재 콜 스택: `console.log('sync')` → 실행 → 출력 완료
4. **콜 스택이 비워진 후 → 마이크로태스크 큐 처리**
- 콜 스택이 비면 **이벤트 루프(Event Loop)** 가

마이크로태스크 큐를 먼저 확인한다.

- `.then()`의 콜백(`console.log('promise')`)이 실행됨.
5. 마지막으로 태스크 큐 처리
- 이제야 `setTimeout`의 콜백이 실행된다.
- 이는 매크로태스크(또는 태스크 큐)에서 실행되므로 가장 마지막.

## Q4.

다음 중 `async/await`에 대한 설명으로 옳은 것은?

1. `async` 함수는 항상 `Promise`를 반환한다.
2. `await` 키워드는 동기적으로 스레드를 멈춘다.
3. `async` 함수 내부에서 `throw`는 단순한 예외이며, `reject` 상태와는 무관하다.
4. `await`은 `Promise`의 후속 처리 메서드인 `then`을 대체하지 않는다.
- 답

1번

<46.6.1>

1. `async` 함수는 언제나 **Promise를 반환**한다. 반환값이 Promise가 아니더라도 암묵적으로 **Promise.resolve**로 감싸 반환한다.
2. 스레드를 멈추지 않고 논리적으로 일시정지
3. throw문은 암묵적으로 Promise.reject()를 반환
4. await은 내부적으로 then과 동일한 역할을 함