ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ์ปดํ“จํ„ฐ์—๊ฒŒ ์‹คํ–‰์„ ์š”๊ตฌํ•˜๋Š” ์ผ์ข…์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ์€์„ ์ฐพ์•„ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์š”๊ตฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ž‘์—…์ด๋ฉฐ, ์ด ๊ฒฐ๊ณผ๋ฌผ์ด ๋ฐ”๋กœ ์ฝ”๋“œ์ด๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑ ํ›„ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ(Compiler) ํ˜น์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)๋ผ๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•

์›น์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์œ ์ผํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ ์ปดํŒŒ์ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋Ÿฐํƒ€์ž„์— ์ปดํŒŒ์ผ๋˜๋ฉฐ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋„์›€ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

๋ณ€์ˆ˜

๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ž์ฒด ๋˜๋Š” ๊ทธ ๊ณต๊ฐ„์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ™์ธ ์ด๋ฆ„์„ ๋งํ•œ๋‹ค.

์‹๋ณ„์ž

๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์‹๋ณ„์ž(Identifier)๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์‹๋ณ„์ž๋Š” ๊ฐ’์ด ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค. ๋ณ€์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์€ ๋ชจ๋‘ ์‹๋ณ„์ž๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…

  • Number
  • String
  • Boolean
  • Object
  • Symbol
  • Function
  • undefined
  • BigInt..?

null์€ object ํƒ€์ž…์ด๋‹ค.

img.png

์Šค์ฝ”ํ”„

ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„. ์ฆ‰, ์˜ค๋กœ์ง€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก๋งŒ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.

var foo = 1;

{
    var foo = 10;
}
console.log(foo) // 10 ์˜๋„์น˜ ์•Š๋Š” ๋ณ€๊ฒฝ

๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

let ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

let foo = 1;

{
    let foo = 2;
}
console.log(foo) // 1

task queue

์ฝœ ์Šคํƒ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ setTimeout, ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ํ

microtask queue

Promise.then ์ฝœ๋ฐฑ์ด ์ €์žฅ๋˜๋Š” ํ

์ด๋ฒคํŠธ ๋ฃจํ”„ ?

์ •์˜

๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋™์ž‘ ํƒ€์ด๋ฐ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ์ž ์—ญํ• . ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ž€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์‹คํ–‰์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์„ ๋งก๋Š” ๋“ฑ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ๋œ ๋™์ž‘์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ณณ์ด๋‹ค.

์ค‘์š”ํ•œ ์ด์œ 

1. ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰๋œ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์„ ํฌํ•จํ•˜์—ฌ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ผ๋Š” ๊ณณ์—์„œ ์‹คํ–‰๋œ๋‹ค.

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์€ ์ง€์—ฐ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…๋“ค์„ ์ง€์—ฐ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ž‘์—… ๊ด€๋ฆฌ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ํƒญ ๋งˆ๋‹ค ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘๋ฉ๋‹ˆ๋‹ค.

2. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ์ด๋ฒค๋“œ ๋ฃจํ”„์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.
๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๊ฐ™์€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์˜ค๋žซ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ž‘์—…์„ ์šฐ์„ ์œผ๋กœ ๋™์ž‘์‹œํ‚ฌ ๊ฒƒ์ธ๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์„ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋™์ž‘

  1. ์ฝœ ์Šคํƒ์— ์Œ“์—ฌ์žˆ๋Š” task ์ •๋ฆฌ
  2. microtask queue์— ๋“ฑ๋ก๋œ Promise.then ์ฝœ๋ฐฑ ์‹คํ–‰
  3. ํ™”๋ฉด ๊ฐฑ์‹ ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ด๋™
  4. task queue์˜ ์ฝœ๋ฐฑ ํ•˜๋‚˜์”ฉ ์‹คํ–‰

๋”๋ณด๊ธฐ

๋ธ”๋กœํ‚น VS ๋…ผ๋ธ”๋กœํ‚น

ํŒŒ์ด์ฌ์€ ๋ธ”๋กœํ‚น ์–ธ์–ด์ด๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋…ผ๋ธ”๋กœํ‚น ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฐ์‚ฐ์ด ๋๋‚˜๋Š” ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์  ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋– ํ•œ ์ž‘์—…์ด ๋๋‚˜๊ณ  ์ด๋ค„์ ธ์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค์€ async/await ๋‚˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” Stack๊ณผ Queue๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ setTimeout ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์€ Queue(task queue)๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ์— Stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.

Hosting

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์„ ์–ธ๋ฌธ๋“ค์ด ์ตœ์ƒ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”๋ณด๊ธฐ

ํด๋กœ์ €

ํด๋กœ์ €๋ž€ ์ž์‹ ์ด ์ƒ์„ฑ๋  ๋•Œ์˜ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ๊ทธ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ค‘์ฒฉ ํ•จ์ˆ˜๋กœ ์‰ฝ๊ฒŒ ํด๋กœ์ €๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์›๋ž˜ ํ•จ์ˆ˜ ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์Šค์ฝ”ํ•‘ํ•  ๋•Œ๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ•‘์„ ๋”ฐ๋ผ์„œ ๊ทธ ์ „์—ญ ๋ณ€์ˆ˜์— ์žˆ๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์œ„์น˜์‹œํ‚ด์œผ๋กœ์„œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ๊ฐ์‹ธ๋Š” environment๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๊ณ , ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

var color = 'red'; 
function foo() { 
    var color = 'blue'; // 2 
    function bar() { 
        console.log(color); // 1 'blue'
    } 
    return bar; 
} 
var baz = foo(); // 3 
baz(); // 4 undefined

๋”๋ณด๊ธฐ

This

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” this๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ, this๋Š” ํ˜ธ์ถœ๋œ ์ƒํ™ฉ์—์„œ ํ•จ์ˆ˜๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ํ™˜๊ฒฝ์—์„œ this๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด, ๊ทธ๊ฒƒ์€ window ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • apply: ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ this ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด๊ณ  ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐฐ์—ด์ด ์˜จ๋‹ค.
  • call: ๋ฉ”์„œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ this ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด๊ณ  ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐฐ์—ด์ด ์•„๋‹Œ ์ผ๋ฐ˜ ๋ณ€์ˆ˜๊ฐ€ ์˜จ๋‹ค.
  • bind: ๋ฉ”์„œ๋“œ๋Š” ๋‹น์žฅ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋˜๋Š” ํ˜•ํƒœ๋กœ ํ•„์š”ํ•œ ๋•Œ์— ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

apply, call, bind๋ฅผ ํ†ตํ•ด this๋ฅผ ์ฃผ์ž… ํ˜น์€ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

async/await

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ Promise๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๊ณ , ์ฝœ๋ฐฑ hell์ด๋‚˜ ๋ฌดํ•œ then๊ณผ ๊ฐ™์€ ๋ณด๊ธฐ ์•ˆ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ

๋ณดํ†ต์€ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ œ์–ด ์ปดํฌ๋„ŒํŠธ์˜ ํผ ๋ฐ์ดํ„ฐ๋Š” React ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‹ค๋ค„์ง€๊ณ  ๋Œ€์•ˆ์ธ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” DOM ์ž์ฒด์—์„œ ํผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  • ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋Š” setState๋กœ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  ref๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • defaultValue๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (checkbox, radio๋Š” defaultChecked)
  • https://ko.reactjs.org/docs/uncontrolled-components.html
  • file input ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ€์žฅ ๋ฐ€์ ‘ํ•œ ๋ฉ”์„œ๋“œ

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ?
ํ•จ์ˆ˜์™€ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ.
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ถœ์ฒ˜: https://mangkyu.tistory.com/111 [MangKyuโ€™s Diary]

img_1.png ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ๋ถ€์ˆ˜ํšจ๊ณผ (Side Effect), โ€˜์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์—†์ดโ€™ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์ด๊ณ , ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด ์ด์— ์†ํ•ฉ๋‹ˆ๋‹ค.

  • ์ˆœ์ˆ˜ํ•จ์ˆ˜ (๋™์ผํ•œ ์ธ์ž์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค)

  • ๋ถ€์ˆœ๋ฌผ X (ํŒŒ๋ผ๋ฏธํ„ฐ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋“ค๋งŒ ์‚ฌ์šฉ)

  • ํ•จ์ˆ˜์™€ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ

  • map

  • filter

  • reduce

์ปค์Šคํ…€ํ›…์„ ๋งŒ๋“ค ๋•Œ ์ œ์•ฝ์กฐ๊ฑด

jquery์™€ React ์ฐจ์ด

React๋Š” Virtual DOM์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง ๋˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ ์–ด ๋น ๋ฅด๊ฒŒ ๋А๊ปด์ง‘๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ค‘๋ณต ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ WebAPI

stopPropagation ์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง/์บก์ณ๋ง์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์š”์†Œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์„๊ฒฝ์šฐ stopPropagation API๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋‘๊ฐœ์˜ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ๋งŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด stopImmediatePropagation API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฒคํŠธ๊ฐ€ ๋‘๊ฐœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๊ฒƒ์ด ๋จผ์ € ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ

function๊ณผ arrow function

  • this: function์€ ์ „์—ญ ๊ฐ์ฒด(window), arrow function์€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฅดํ‚ต๋‹ˆ๋‹ค.
  • arguments: arrow function์€ arguments๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • prototype: arrow function์€ prototype์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

map() ํ•จ์ˆ˜์—์„œ index๋ฅผ ์ง€์–‘ํ•˜๋Š” ์ด์œ 

์šฐ๋ฆฌ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ฐฐ์น˜ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ map()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ๋ฐ˜๋ณต๋˜๋Š” element์— key๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ด€๋ จ ๊ฒฝ๊ณ ๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ์–ด๋–ค ์•„์ดํ…œ์ด ๋ณ€๊ฒฝ, ์‚ญ์ œ ๋˜์—ˆ๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด key props๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.
๋ฆฌ์•กํŠธ๋Š” ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋ฆฌ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š”๋ฐ ๋ฐฐ์—ด์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ key props๊ฐ€ ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์š”์†Œ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๋Š” ์ƒํ™ฉ์ธ๋ฐ๋„ ์ „์ฒด ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋œ๋‹ค.
key ๊ฐ’์„ map() ๋‚ด๋ถ€์˜ index๋กœ ์ง€์ •ํ•  ๊ฒฝ์šฐ์—๋„ ๋ฐฐ์—ด ์ „์ฒด ์š”์†Œ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์œ„์น˜์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋ผ๋ฉด ๋ฐฐ์—ด ์ „์ฒด์˜ index๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์œ ์˜ id๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ reordered ๋˜๋Š” filtered ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด index๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๋Š” ์˜๊ฒฌ๋„ ์žˆ๋‹ค.

CSS-in-JS VS CSS-in-CSS

Redux, recoil ๊ณตํ†ต์ , ์ฐจ์ด์ 

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ€์žฅ ๋ฐ€์ ‘ํ•œ ๋ฉ”์†Œ๋“œ
  • ์ปค์Šคํ…€ํ›…์„ ๋งŒ๋“ค ๋•Œ์˜ ์ œ์•ฝ์กฐ๊ฑด
  • jquery์™€ ๋ฆฌ์•กํŠธ ์ฐจ์ด
  • commonJs ๋ญ๋”๋ผ..
  • ์ด๋ฒคํŠธ ์ค‘๋ณต ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ WebAPI
    • Stopimmediatepropagation API
    • ์ด๋ฒคํŠธ๊ฐ€ ๋‘๊ฐœ ๋“ฑ๋ก๋˜์–ด ์žˆ์„๋•Œ ์–ด๋–ค๊ฒŒ ์‹คํ–‰๋ ๊นŒ?
  • function๊ณผ arrow function์˜ ์ฐจ์ด
  • CSS-in-JS VS CSS-in-CSS
  • Redux, recoil ๋‹ค๋ฅธ ์ 
  • Rx, Observable
  • CSS, JS๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ CSS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ  git / jenkins ๊ด€๋ จ ์งˆ๋ฌธ babel์˜ ์—ญํ• ๊ณผ ์‚ฌ์šฉ ์ด์œ  webpack์˜ ์—ญํ• ๊ณผ ์‚ฌ์šฉ ์ด์œ  jquery / react ์ฐจ์ด์  ๋„ค์ด๋ฒ„์— ์ ‘์†ํ•  ๋•Œ ๋ Œ๋”๋ง ๋˜๋Š” ๊ณผ์ • ๋ Œ๋”๋ง ๊ณผ์ •์„ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์„œ๋น„์Šค์— ์†๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ๋•Œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๋˜๋Š” ๊ณผ์ • tcp / http ์ฐจ์ด์  ํ•จ์ˆ˜ ์„ ์–ธ์‹ / ํ•จ์ˆ˜ ํ‘œํ˜„์‹ ์ฐจ์ด์  csr / ssr ๊ด€๋ จ ์งˆ๋ฌธ csrf๋ž€? hooks ๊ด€๋ จ ์งˆ๋ฌธ ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ด€๋ จ๋œ css ์š”์†Œ๋“ค์ด ๋ฌด์—‡์ด ์žˆ๋Š”์ง€? this ๊ด€๋ จ ์งˆ๋ฌธ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ es6๋ฒ„์ „ ์ดํ›„๋กœ ์ƒ๊ฒจ์ง„ ๊ธฐ๋Šฅ๋“ค์„ ์ฝ์ง€ ๋ชปํ•˜๋Š” ์ด์œ  scriptํƒœ๊ทธ๊ฐ€ body์œ„์™€ body์•„๋ž˜์— ์žˆ์„ ๋•Œ ์ฐจ์ด์  position์˜ relative์™€ absolute ์†๋„ ๋น„๊ต
  • keep-alive๋ž€? this๋ž€? hooks์—๋Š” ์ข…๋ฅ˜๊ฐ€ ๋ฌด์—‡์ด ์žˆ๊ณ  ์‚ฌ์šฉํ•ด๋ณธ ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”๊ฐ€? useEffect ๊ด€๋ จ ์งˆ๋ฌธ useCallback ๊ด€๋ จ ์งˆ๋ฌธ useState ์‚ฌ์šฉ ๋ฐฉ๋ฒ• tcp / udp ์ฐจ์ด์  http๋ฒ„์ „ ๊ด€๋ จ ์งˆ๋ฌธ prototype์ด๋ž€? oop๋ž€? lazyLoading์ด๋ž€? ๋ณธ์ธ์˜ ์„ฑ๊ฒฉ์€ ์–ด๋–ค๊ฒƒ ๊ฐ™์€์ง€? ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์ด ๋ณธ์ธ์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๋ผ๋ณด๋Š”์ง€? ์„ฑ์žฅ์ด๋ž€? closure๋ž€? closure ์žฅ๋‹จ์  index๋ž€? ์‚ฌ์šฉํ•ด๋ณธ database procedure๋ž€? aop๋ž€? ํšŒ์‚ฌ๋“ค์„ ์ง€์›ํ•  ๋•Œ ์–ด๋–ค ๊ฑธ ๋ณด๊ณ  ์ง€์› ํ•ด์™”๋Š”์ง€? css display ์ข…๋ฅ˜ display์˜ inline / none ์ฐจ์ด์ 