์ฑ <๋ฌ๋์๋ฐ์คํฌ๋ฆฝํธ>๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- <๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ vs ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ>
- <๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ(1)- ์ฝ๋ฐฑ>
- 1. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ
- 2. ์ฝ๋ฐฑ
- 2-1) ์ค์ฝํ์ ๋น๋๊ธฐ์ ์คํ
- 2-2) ์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ
- 2-3) ์ฝ๋ฐฑ ํฌ
<๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ vs ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ>
๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ(Synchronous processing model)์ ์ง๋ ฌ์ ์ผ๋ก ํ์คํฌ(task)๋ฅผ ์ํํ๋ค. ์ฆ, ํ์คํฌ๋ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉฐ ์ด๋ค ์์ ์ด ์ํ ์ค์ด๋ฉด ๋ค์ ์์ ์ ๋๊ธฐํ๊ฒ ๋๋ค. ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์ดํฐ๊ฐ ์๋ต๋ ๋๊น์ง ์ดํ ํ์คํฌ๋ค์ ๋ธ๋กํน(blocking, ์์ ์ค๋จ)๋๋ค.
#๋๊ธฐ์์ผ๋ก ๋์ - ์์ฐจ์ ์ผ๋ก ์คํ๋จ.
function func1() {
console.log('func1');
func2();
}
function func2() {
console.log('func2');
func3();
}
function func3() {
console.log('func3');
}
func1();
๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ(Asynchronous processing model ๋๋ Non-Blocking processing model)์ ๋ณ๋ ฌ์ ์ผ๋ก ํ์คํฌ๋ฅผ ์ํํ๋ค. ์ฆ, ํ์คํฌ๊ฐ ์ข ๋ฃ๋์ง ์์ ์ํ๋ผ ํ๋๋ผ๋ ๋๊ธฐํ์ง ์๊ณ ๋ค์ ํ์คํฌ๋ฅผ ์คํํ๋ค.
#๋น๋๊ธฐ์์ผ๋ก ๋์ - ์์ฐจ์ ์ผ๋ก ์คํ๋์ง ์์.
function func1() {
console.log('func1');
func2();
}
function func2() {
setTimeout(function() {
console.log('func2');
}, 0);
func3();
}
function func3() {
console.log('func3');
}
func1();
<๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ(1) - ์ฝ๋ฐฑ>
1. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ
์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ผ ์ค๋ ๋์์ ๋์ํด ํ ๋ฒ์ ํ ๊ฐ์ง ์ผ๋ง์ ์ฒ๋ฆฌํ ์ ์๋ค. ๋๋ฌธ์ ๋ถ๋๋ฝ๊ฒ ๋์ํ๋ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์ฌ์ฉ์์ ์ ๋ ฅ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ๋น๋๊ธฐ์ ๊ด์ ์์ ์๊ฐํด์ผ ํ๋ค. ์ฌ์ฉ์ ์ ๋ ฅ ์ธ์, ๋น๋๊ธฐ์ ํ ํฌ๋์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- Ajax ํธ์ถ์ ๋น๋กฏํ ๋คํธ์ํฌ ์์ฒญ
- ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ๋ฑ์ ํ์ผ์์คํ ์์
- ์๋์ ์ผ๋ก ์๊ฐ ์ง์ฐ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ(์๋ ๋ฑ)
2. ์ฝ๋ฐฑ
- ํน์ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ํจ์๋ฅผ ์๋ฏธํ๊ณ , ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์์์์ ํธ์ถ๋๋ค. ๊ฐ๋จํ ๋งํด ๋์ค์ ํธ์ถํ ํจ์์ด๋ค.
- ์ฌ์ฉ์ ์ ๋ ฅ, Timeout ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค.
- ๋ณดํต ์ต๋ช ํจ์๋ก ์ฌ์ฉํ๋ค.
- ์ฝ๋ฐฑํจ์๋ฅผ ์ด์ฉํ์ฌ ๋์์ ๊ตฌํํ๋ฉด ์ฒ๋ฆฌ๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ฒ๋ฆฌ๊ฐ ๋๋๋ ์์ ์์ ํจ์๋ฅผ ํธ์ถํ๋ค. ์ฆ, ์ ๋ง๋ก ํ์ํ ๋๋ง ํจ์๋ฅผ ํธ์ถํด์ ํจ์จ์ด ์ข๊ณ ์น์ฌ์ดํธ์์๋ ์ฌ๋ฌ ๊ฐ์ง ๋์์ ๋์์ ํ ์ ์๋ค.
// ์ฝ๋ฐฑ ํจ์๊ฐ ๋ callback๋งค๊ฐ๋ณ์ ์ค์
function plus(a, b, callback) {
var sum = a + b;
callback(sum);
}
// plus ํจ์์ ์ต๋ช
ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ
plus(1, 2, function(result) {
console.log(result);
});
//์ถ๋ ฅ
3
2-1) ์ค์ฝํ์ ๋น๋๊ธฐ์ ์คํ
function countdown(){
let i;
for(i=5;i>=0;i--){
setTimeout(function()){
console.log(i===0?"Go":i);
}, (5-i)*1000;
}
}
countdown();
์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ ์์ํ ๊ฒ์ฒ๋ผ 5์์ ์นด์ดํธ๋ค์ด์ ํ๋ ๊ฒ์ด ์๋๋ผ, -1์ด ์ฌ์ฏ ๋ฒ ๋ฐ๋ณต๋๋ค. ์ฝ๋์ ๋ฌธ์ ์ ์ i๊ฐ for๋ฌธ ๋ฐ์์ ์ ์ธ๋์ด for ๋ฃจํ๊ฐ ์คํ์ ๋ง์น๊ณ i๊ฐ -1ํ์ ์ฝ๋ฐฑ์ด ์คํ๋๋ค๋ ์ ์ด๋ค. ์ด๋ IIFE ๋๋ i๋ฅผ for๋ฃจํ ์ ์ธ๋ถ์์ ์ ์ธํ๋ฉด ํด๊ฒฐ๋๋ค.
2-2) ์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ
- ์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ์ ์ฝ๋ฐฑ๊ณผ ๊ด๋ จ๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ํ์ค์ผ๋ก ์ฝ๋ฐฑ์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ ์๋ฌ ๊ฐ์ฒด๋ฅผ ์ฐ๋ฉด ๋๋ค.
- ์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ์์ ๊ฐ์ฅ ๋จผ์ ํ๋ ์ผ์ ์๋ฌ๊ฐ์ฒด์ธ err๊ฐ ์ฐธ ๊ฐ์ ๊ฐ์ด๋ผ๋ฉด ํ์ผ์ ์ฝ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก ์ฝ์์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๊ณ ์ฆ์ ๋น ์ ธ๋์ค๋ ๊ฒ์ด๋ค.
#์๋ฌ๊ฐ์ฒด = err
const fs = require('fs');
const frame = 'may_or_maynot_exist.txt'
fs.readFile(frame, function(err, date){
if(err) return console.error('error message');
});
2-3) ์ฝ๋ฐฑ ํฌ : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ ์ํด ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฐ์ํด์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
'๐ฐ ์ธ์ด > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ(1) - ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ DOM (0) | 2020.01.24 |
---|---|
์ ๊ท ํํ์ (0) | 2020.01.23 |
ES6์ ์ฌ๋ณผ, ์ดํฐ๋ ์ดํฐ์ ์ ๋ค๋ ์ดํฐ (0) | 2020.01.14 |
map๊ณผ set (0) | 2020.01.10 |
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) (0) | 2020.01.05 |