-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1271 from nincoding/nincoding
42μ₯ λΉλκΈ° νλ‘κ·Έλλ° - νμμ§
- Loading branch information
Showing
1 changed file
with
142 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
## 42μ₯. β¨ λΉλκΈ° νλ‘κ·Έλλ° | ||
|
||
### π 42-1. λκΈ° μ²λ¦¬μ λΉλκΈ° μ²λ¦¬ | ||
|
||
> `ν¨μμ μ€ν μμλ μ€ν 컨ν μ€νΈ μ€νμΌλ‘ κ΄λ¦¬`νλ©°, **μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨ νλμ μ€ν 컨ν μ€νΈ μ€ν**μ κ°μ΅λλ€. | ||
ν¨μλ₯Ό νΈμΆνλ©΄, ν¨μ μ½λκ° νκ°λμ΄ ν¨μ μ€ν 컨ν μ€νΈκ° μμ±λ©λλ€. | ||
|
||
μ΄λ μμ±λ ν¨μ μ€ν 컨ν μ€νΈλ μ€ν 컨ν μ€νΈ μ€ν(= μ½μ€ν)μ νΈμ¬λκ³ ν¨μμ½λκ° μ€νλ©λλ€. | ||
|
||
ν¨μ μ½λμ μ€νμ΄ μ’ λ£νλ©΄ ν¨μ μ€ν 컨ν μ€νΈλ μ€ν 컨ν μ€νΈ μ€νμμ νλμ΄ μ κ±°λ©λλ€. | ||
|
||
```js | ||
const foo () => {}; | ||
const bar () => {}; | ||
|
||
foo(); | ||
bar(); | ||
``` | ||
|
||
 | ||
|
||
μμ κ°μ΄ μ€ν 컨ν μ€νΈ μ€νμ LIFO (Last In First Out) λ°©μμΌλ‘ κ°μ₯ λ¦κ² λ€μ΄μ¨ ν¨μ 컨ν μ€νΈκ° κ°μ₯ λ¨Όμ λκ°λ ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€. | ||
|
||
**μ€ν 컨ν μ€νΈ μ€νμ ν¨μ μ€ν 컨ν μ€νΈκ° νΈμλλκ²μ ν¨μ μ€νμ μμ**μ μλ―Έν©λλ€. | ||
|
||
μ€ν 컨ν μ€νΈ μ€νμ μ΅μμ μμμΈ `μ€ν μ€μΈ μ€ν 컨ν μ€νΈ`λ₯Ό `μ μΈν λͺ¨λ μ€ν 컨ν μ€νΈλ λͺ¨λ μ€ν λκΈ° μ€μΈ νμ€ν¬` λ€μ λλ€. | ||
|
||
> μ΄μ²λΌ, **μλ°μ€ν¬λ¦½νΈ μμ§μ νλ²μ νλμ νμ€ν¬λ§ μ€νν μ μλ μ±κΈ μ€λ λ λ°©μ**μΌλ‘ λμν©λλ€. | ||
**μ±κΈ μ€λ λ λ°©μ**μμ , `ν λ²μ νλμ νμ€ν¬λ§ μ€ν` ν μ μκΈ° λλ¬Έμ **μ²λ¦¬μ μκ°μ΄ 걸리λ νμ€ν¬λ₯Ό μ€ννλ κ²½μ° λΈλ‘νΉ(= μμ μ€λ¨)μ΄ λ°μ**νκ² λ©λλ€. | ||
|
||
> `νμ¬ μ€ν μ€μΈ νμ€ν¬κ° μ’ λ£λ λκΉμ§ λ€μμ μ€νλ νμ€ν¬κ° λκΈ°`νλ λ°©μμ `λκΈ°(synchronous)μ²λ¦¬` λΌκ³ ν©λλ€. | ||
**λκΈ° μ²λ¦¬ λ°©μμ νμ€ν¬λ₯Ό μμλλ‘ νλμ© μ²λ¦¬**νλ―λ‘, **μ€ν μμκ° λ³΄μ₯**μ λμ§λ§ **μμ νμ€ν¬κ° μ’ λ£ν λκΉμ§ λ€λ₯Έ νμ€ν¬λ€μ λΈλ‘νΉ**λλ€λ λ¨μ μ κ°μ§κ³ μμ΅λλ€. | ||
|
||
```js | ||
function foo() { | ||
console.log("foo"); | ||
} | ||
|
||
function bar() { | ||
console.log("bar"); | ||
} | ||
|
||
// setTimeoutμ μΌμ μκ°μ΄ κ²½κ³Όν μ΄ν, μ½λ°± ν¨μ fooλ₯Ό νΈμΆν©λλ€. | ||
// setTimeoutμ bar ν¨μλ₯Ό λΈλ‘νΉνμ§ μμ΅λλ€. | ||
setTimeout(foo, 3 * 1000); | ||
bar(); | ||
``` | ||
|
||
μ μ½λλ₯Ό μ΄ν΄λ³΄λ©΄, setTimeout ν¨μ μ΄νμ νμ€ν¬λ₯Ό λΈλ‘νΉνμ§ μκ³ κ³§λ°λ‘ μ€νν©λλ€. | ||
|
||
 | ||
|
||
> μ΄μ²λΌ `νμ¬ μ€νμ€μΈ νμ€ν¬κ° μ’ λ£λμ§ μμ μνλΌ ν΄λ, λ€μ νμ€ν¬λ₯Ό 곧λ°λ‘ μ€ν`νλ λ°©μμ `λΉλκΈ°(asynchronous) μ²λ¦¬`λΌκ³ ν©λλ€. | ||
`λΉλκΈ° μ²λ¦¬ λ°©μ`μ, **λ€μ νμ€ν¬λ₯Ό 곧λ°λ‘ μ€ννλ―λ‘ λΈλ‘νΉμ΄ λ°μνμ§ μλλ€**λ μ₯μ μ κ°μ§μ§λ§, **νμ€ν¬μ μ€ν μμκ° λ³΄μ₯λμ§ μλλ€**λ λ¨μ μ κ°μ§λλ€. | ||
|
||
λΉλκΈ° μ²λ¦¬λ₯Ό μννλ `λΉλκΈ° ν¨μ`λ μ ν΅μ μΌλ‘ `μ½λ°± ν¨ν΄μ μ¬μ©`ν©λλ€. | ||
|
||
 | ||
|
||
νμ§λ§, μ΄ **μ½λ°± ν¨ν΄μ μ½λ°± ν¬μ λ°μμμΌ κ°λ μ±μ λμκ²νκ³ , λΉλκΈ° μ²λ¦¬ μ€ λ°μν μλ¬μ μμΈ μ²λ¦¬κ° κ³€λνλ©°, μ¬λ¬κ°μ λΉλκΈ° μ²λ¦¬λ₯Ό ν λ²μ μ²λ¦¬νλλ°λ νκ³**κ° μμ΅λλ€. | ||
|
||
μ΄λ₯Ό 보μνκΈ° μν΄, `Promiseμ κ°μ λΉλκΈ° ν¨μκ° λ±μ₯`νμμ΅λλ€. | ||
|
||
μΆκ°μ μΌλ‘, **νμ΄λ¨Έ ν¨μμΈ setTimeoutκ³Ό setInterval, HTTP μμ², μ΄λ²€νΈ νΈλ€λ¬λ λΉλκΈ° μ²λ¦¬ λ°©μ**μΌλ‘ λμν©λλ€. | ||
|
||
<br> | ||
|
||
--- | ||
|
||
### π 42-2. μ΄λ²€νΈ 루νμ νμ€ν¬ ν | ||
|
||
μμ μ΄ν΄λ³Έ κ² μ²λΌ, **μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λλ‘ λμ**ν©λλ€. | ||
|
||
- μ±κΈ μ€λ λ : ν λ²μ νλμ νμ€ν¬λ§ μ²λ¦¬ κ°λ₯ | ||
|
||
νμ§λ§ λΈλΌμ°μ κ° λμνλ κ²μ μ΄ν΄λ³΄λ©΄ λ§μ νμ€ν¬κ° λμμ μ²λ¦¬λλ κ² μ²λΌ λκ»΄μ§λλ€. | ||
|
||
ex. HTML μμκ° μ λλ©μ΄μ μ ν΅ν΄ μμ§μ΄λ©΄μ μ΄λ²€νΈ μ²λ¦¬, HTTP μμ²μ ν΅ν΄ μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ§κ³ μ€λ©΄μ λ λλ§ λ±... | ||
|
||
> `μ΄λ²€νΈ 루ν`λ **μλ°μ€ν¬λ¦½νΈμ λμμ±μ μ§μ**ν©λλ€. | ||
μ΄λ²€νΈ 루νλ λΈλΌμ°μ μ λ΄μ₯λμ΄ μλ κΈ°λ₯ μ€ νλμ λλ€. | ||
|
||
 | ||
|
||
ꡬκΈμ V8 μλ°μ€ν¬λ¦½νΈ μμ§μ λΉλ‘―ν `λλΆλΆμ μλ°μ€ν¬λ¦½νΈ μμ§μ ν¬κ² μ½μ€νκ³Ό νμ΄λΌλ 2κ°μ μμμΌλ‘ ꡬλΆ`ν μ μμ΅λλ€. | ||
|
||
#### π 1. μ½μ€ν (Call Stack) = μ€ν 컨ν μ€νΈ μ€ν | ||
|
||
`μμ€μ½λ(μ μ μ½λλ ν¨μ μ½λ λ±) νκ° κ³Όμ μμ μμ±λ μ€ν 컨ν μ€νΈκ° μΆκ°λκ³ , μ κ±°λλ μ€ν μλ£κ΅¬μ‘°`μΈ μ€ν 컨ν μ€νΈ μ€νμ λλ€. | ||
|
||
ν¨μλ₯Ό νΈμΆνλ©΄ ν¨μ μ€ν 컨ν μ€νΈκ° **μμ°¨μ μΌλ‘ μ½ μ€νμ νΈμλμ΄ μμ°¨μ μΌλ‘ μ€ν**λ©λλ€. | ||
|
||
μλ°μ€ν¬λ¦½νΈ μμ§μ νλμ μ½ μ€νμ μ¬μ©νκΈ° λλ¬Έμ, μ΅μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λμ΄ μ½ μ€νμμ μ κ±°λκΈ° μ κΉμ§λ λ€λ₯Έ μ΄λ€ νμ€ν¬λ μ€νλμ§ μμ΅λλ€. (λΈλ‘νΉ) | ||
|
||
#### π 2. ν (Heap) | ||
|
||
νμ `κ°μ²΄κ° μ μ₯λλ λ©λͺ¨λ¦¬ 곡κ°`μ λλ€. | ||
|
||
μ½ μ€νμ μμμΈ **μ€ν 컨ν μ€νΈλ νμ μ μ₯λ κ°μ²΄λ₯Ό μ°Έμ‘°**ν©λλ€. | ||
|
||
λ©λͺ¨λ¦¬μ κ°μ μ μ₯νλ €λ©΄ λ¨Όμ κ°μ μ μ₯ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ ν΄μΌ ν©λλ€. | ||
|
||
κ°μ²΄λ μμ κ°κ³Όλ λ¬λ¦¬ ν¬κΈ°κ° μ ν΄μ Έ μμ§ μκΈ° λλ¬Έμ, ν λΉν΄μΌ ν `λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό λ°νμμ κ²°μ `ν΄μΌ ν©λλ€. (= `λμ ν λΉ`) | ||
|
||
λ°λΌμ, κ°μ²΄κ° μ μ₯λλ λ©λͺ¨λ¦¬ 곡κ°μΈ **νμ ꡬ쑰ν λμ΄μμ§ μλ€**λ νΉμ§μ΄ μμ΅λλ€. | ||
|
||
`μ½ μ€νκ³Ό νμΌλ‘ ꡬμ±λμ΄ μλ μλ°μ€ν¬λ¦½νΈ μμ§`μ `λ¨μν νμ€ν¬κ° μμ²λλ©΄ μ½ μ€νμ ν΅ν΄ μμ²λ μμ μ μμ°¨μ μΌλ‘ μ€ν`ν λΏμ λλ€. | ||
|
||
λΉλκΈ° μ²λ¦¬μμ μμ€μ½λμ νκ°μ μ€νμ μ μΈν λͺ¨λ μ²λ¦¬λ μλ°μ€ν¬λ¦½νΈ μμ§μ ꡬλνλ νκ²½μΈ λΈλΌμ°μ λλ Node.jsκ° λ΄λΉν©λλ€. | ||
|
||
> μ΄λ₯Ό μν΄, `λΈλΌμ°μ νκ²½μ νμ€ν¬ νμ μ΄λ²€νΈ 루νλ₯Ό μ 곡`ν©λλ€. | ||
#### π 3. νμ€ν¬ ν (task queue) | ||
|
||
`setTimeout`μ΄λ `setInterval`κ³Ό κ°μ **λΉλκΈ° ν¨μμ μ½λ°± ν¨μ λλ μ΄λ²€νΈ νΈλ€λ¬κ° μΌμμ μΌλ‘ 보κ΄λλ μμ**μ λλ€. | ||
|
||
μ°Έκ³ λ‘, νλ‘λ―Έμ€μ νμ μ²λ¦¬ λ©μλμ μ½λ°± ν¨μκ° μΌμμ μΌλ‘ 보κ΄λλ λ§μ΄ν¬λ‘νμ€ν¬ νλ μ‘΄μ¬ν©λλ€. | ||
|
||
#### π 4. μ΄λ²€νΈ 루ν (event loop) | ||
|
||
`μ½ μ€νμ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈκ° μλμ§`, κ·Έλ¦¬κ³ `νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μ(μ½λ°± ν¨μ, μ΄λ²€νΈ νΈλ€λ¬ λ±)κ° μλμ§` `λ°λ³΅ν΄μ νμΈ`ν©λλ€. | ||
|
||
λ§μ½ **μ½ μ€νμ΄ λΉμ΄μκ³ , νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μκ° μλ μν©**μ΄λΌλ©΄ **μ΄λ²€νΈ 루νλ μμ°¨μ (FIFO, first in First Out, ν)μΌλ‘ νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μλ₯Ό μ½ μ€νμΌλ‘ μ΄λ**μν΅λλ€. | ||
|
||
μ΄λ μ½ μ€νμΌλ‘ μ΄λν ν¨μλ μ€νμ΄ λ©λλ€. | ||
|
||
μ¦, `νμ€ν¬ νμ μΌμ 보κ΄λ ν¨μλ€μ λΉλκΈ° μ²λ¦¬ λ°©μμΌλ‘ λμ`ν©λλ€. | ||
|
||
> `μλ°μ€ν¬λ¦½νΈ μμ§μ μ±κΈ μ€λ λ λ°©μ`μΌλ‘ λμνμ§λ§, `λΈλΌμ°μ νκ²½μ λ©ν° μ€λ λ`λ‘ λμν©λλ€. | ||
λ§μ½ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μ½λκ° μλ°μ€ν¬λ¦½νΈ μμ§μμ μ±κΈ μ€λ λ λ°©μμΌλ‘ λμνλ€λ©΄ μλ°μ€ν¬λ¦½νΈλ λΉλκΈ° λμν μ μμ΅λλ€. | ||
|
||
μ΄μ²λΌ, **λΈλΌμ°μ νκ²½μ΄ λ©ν° μ€λ λ λ°©μμΌλ‘ μ΄λ²€νΈ 루νμ νμ€ν¬ νλ₯Ό ν΅ν΄ λΉλκΈ° λμμ μ§μ**νκΈ° λλ¬Έμ **μλ°μ€ν¬λ¦½νΈ μ½λμμ λΉλκΈ° νλ‘κ·Έλλ°μ΄ κ°λ₯**ν΄μ‘μ΅λλ€. | ||
|
||
μ΄λ¬ν ꡬ쑰 λλΆμ λΈλΌμ°μ λ μ¬λ¬ μμ μ λμμ μ²λ¦¬νκ³ , μΉ νμ΄μ§κ° μλ΅μ±μ μ μ§νλ©΄μλ λΉλκΈ° νλ‘κ·Έλλ°μ΄ κ°λ₯ν΄μ‘μ΅λλ€. | ||
|
||
μλ°μ€ν¬λ¦½νΈμμλ `λΉλκΈ° νλ‘κ·Έλλ°`μ μν΄ μ£Όλ‘ `μ½λ°± ν¨μ, Promise, async/await λ±μ ν¨ν΄μ μ¬μ©`ν©λλ€. |