๐Ÿ’ป Development/JavaScript

[JavaScript] ๋น„๋™๊ธฐ

ahyeon7 2022. 11. 25. 01:26

๋น„๋™๊ธฐ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

  • ์ปคํ”ผ์ˆ์—์„œ ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋ ค๊ณ  ์ค„์„ ์„ ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋จผ์ € ์˜จ A๊ฐ€ ์ฃผ๋ฌธํ•ด์„œ ์ปคํ”ผ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ B๋Š” ์ฃผ๋ฌธ์กฐ์ฐจ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ blocking์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    => ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์ด์–ด์ด์ง€๋Š” ์ž‘์—…์„ ๋ง‰๋Š”๋‹ค!
  • [B๋Š” A๊ฐ€ ์ปคํ”ผ๋ฅผ ๋ฐ›๋Š” ์‹œ์ ๊ณผ B๊ฐ€ ์ฃผ๋ฌธ์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์ด ๊ฐ™๋‹ค]
    => ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ "๋™๊ธฐ์ "์ด๋‹ค๋ผ๊ณ  ํ•œ๋‹ค.

callback review

  • ๋‹ค๋ฅธ ํ•จ์ˆ˜(A)์˜ ์ „๋‹ฌ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ํ•จ์ˆ˜
  • parameter๋ฅผ ๋„˜๊ฒจ๋ฐ›๋Š” ํ•จ์ˆ˜(A)๋Š” callback ํ•จ์ˆ˜(B)๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜๋„, ์•„๋‹ˆ๋ฉด ๋‚˜์ค‘์— ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค

function B(){
console.log('called at the back!');
}

function A(callback){
callback(); // callback === B
}
A(B);

  • callback in action: ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ (iterator)

[1, 2, 3].map(function(ele, idx){
return ele * ele;
});

  • callback in action: ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ํ•จ์ˆ˜ (event handler)document.querySelector('#btn').addEventListener('click', function(e){
    console.log('button clicked');
    });

blocking

  • ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค
  • (์ „ํ™”๋กœ ์˜ˆ๋กœ ๋“ค๋ฉด) ํ•˜๋˜ ์ผ์„ ๋ฉˆ์ถ”๊ณ  ๋ฐ›์•„์•ผ ํ•œ๋‹ค

non-blocking

  • ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค
  • (๋ฌธ์ž๋กœ ์˜ˆ๋กœ ๋“ค๋ฉด) ํ™•์ธ ํ›„, ๋‚˜์ค‘์— ๋‹ต์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค