๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ ๋‹น์‹ ์ด ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฉด์ ‘์—์„œ ๋งŒ๋‚˜๊ฒŒ๋  ์งˆ๋ฌธ

๊ณ ์„์ง„
10 min readJul 4, 2020

--

## ๋ชฉ์ฐจ

  1. ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •
  2. Callback, Promise, Async/Await
  3. ํ˜ธ์ด์ŠคํŒ…
  4. ํด๋กœ์ €
  5. This
  6. ์‹คํ–‰์ปจํ…์ŠคํŠธ
  7. ํ”„๋กœํ† ํƒ€์ž…

๐ŸŒธ๏ธ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

  1. ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€ HTML ๊ณผ CSS ํŒŒ์ผ์„ ๋ฐ”ํƒ•์œผ๋กœ DOM Tree (Document Object Modal) ์™€CSSOM (CSS Object Model) ์„ ๋งŒ๋“ ๋‹ค.
  2. DOM Tree ์™€ CSSOM ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์šฉ๋„์ธ Render Tree ๋ฅผ ๋งŒ๋“ ๋‹ค.
  3. Render Tree ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ViewPort ๋ฅผ ๊ธฐ์ค€์œผ๋กœ Layout ๋ฐฐ์น˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์ œ Paint ๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ ViewPort ๊ฐ€ ๋ณ€ํ•˜๊ฑฐ๋‚˜, Node ๋ฐฐ์น˜๊ฐ€ ๋‹ฌ๋ผ์กŒ์„ ๋•Œ 3๋ฒˆ๊ณผ 4 ๋ฒˆ์˜ ์ž‘์—…์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ Reflow/RePaint ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์‹ค์ œ DOM ์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ •์ด ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์ž‘์—…์„ ํž˜๋“ค์–ดํ•ฉ๋‹ˆ๋‹ค.

Virtual dom ์„ ์ด์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๏ธ๐ŸŒธ Callback๊ณผ Promise, Async/Await์˜ ์ฐจ์ด์ 

๋น„๋™๊ธฐ ์ž‘์—…์ด๋ž€ ์–ธ์ œ ๋๋‚ ์ง€ ๋ชจ๋ฅด๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋น„๋™๊ธฐ๋ฅผ ๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์žฅ๋ฐ›์•„์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ, ์ด๋•Œ Callback, Promise, Async/Await ์˜ ํž˜์„ ๋นŒ๋ฆฌ๊ฒŒ๋œ๋‹ค.

์ˆœ์„œ๋ฅผ ๋ณด์žฅ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค

1. Callback
๋จผ์ € Callback ์„ ์ด์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž.
๊ฐ๊ฐ์˜ fetcher ์—์„œ ๋‹ค์Œ ์ž‘์—…์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ˆœ์ฐจ ๋ณด์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๏ธ๐Ÿ‘ฎ๐Ÿปโ€โ™€ ๏ธํ•˜์ง€๋งŒ ์Šค์ผ€์ฅด ๊ด€๋ฆฌํ•ด์•ผ๋  ํ•จ์ˆ˜๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด ๊ฐ€๋…์„ฑ์ด ํ˜„์ €ํ•˜๊ฒŒ ๋–จ์–ด์ง€๊ฒŒ๋˜๊ณ , callback ์•ž ๋’ค๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด์„œ ์ž‘์—…์˜ ๋ถ„๋ฆฌ๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

Promise ๋ฅผ ์ด์šฉํ•œ ์ž‘์—… ๋ถ„๋ฆฌ

2. Promise
Callback ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ๊ฒŒ Promise ์ด๋‹ค. Promise๋Š” then ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ž‘์—… ๋‹จ์œ„๋กœ ํ•จ์ˆ˜๋ฅผ ์ชผ๊ฐœ๊ณ , Resolve์™€ Reject Callback ์„ ์ด์šฉํ•ด ์ƒํ™ฉ์— ๋งž๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿ‘ฎ๐Ÿปโ€โ™€๏ธ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ๋Š” Callback ๋ณด๋‹ค ์ข‹์•„์กŒ์ง€๋งŒ, Promise ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด then ์•ˆ์— ์ฝ”๋“œ๊ฐ€ ๋ฌถ์ธ๋‹ค๊ฑฐ๋‚˜ error ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด try/catch ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Promise ์˜ then/catch ์•ˆ์—์„œ ํ•˜๋Š” ์—๋Ÿฌ์™€ ์ค‘๋ณต์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

3. Async/Await

Promise ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๊ฒƒ์ด Async/Await ์ด๋‹ค.
Async Function ์„ ๋งŒ๋“ค๊ณ  ๋‚ด๋ถ€์—์„œ Await ์„ ์ด์šฉํ•˜์—ฌ ์Šค์ผ€์ฅด ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ฒŒ๋œ๋‹ค. ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ , ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฌถ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ถ„๋ฆฌ๊ฐ€ ์†์‰ฝ๊ณ ๋ชจ๋“ˆํ™”ํ•˜๊ธฐ๋„ ์ข‹๋‹ค.

๏ธ๐ŸŒธ ํ˜ธ์ด์ŠคํŒ…(Hoisting)

ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ ์‹คํ–‰์‹œ ์œ ํšจํ•œ ์Šค์ฝ”ํ”„๋‚ด์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€๋ฅผ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  1. ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…
๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์˜ ๊ฒฝ์šฐ ์„ ์–ธ๊ณผ ํ• ๋‹น์œผ๋กœ ๋‚˜๋ˆ ์ง€๊ฒŒ๋œ๋‹ค. ์„ ์–ธ์€ var name; ์„ํ• ๋‹น์€ name = "olaf" ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

ํ˜ธ์ด์ŠคํŒ…์€ ์„ ์–ธ๋ถ€๋งŒ ๋Œ์–ด์˜ฌ๋ฆฌ๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์œ„์˜ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ•˜๊ฒŒ๋œ๋‹ค. console.log ์‹œ์ ์—๋Š” ํ• ๋‹น์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— undefined ๊ฐ€ ์ฐํžˆ๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

2. ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ… (ํ•จ์ˆ˜ ์„ ์–ธ์‹ ํ˜ธ์ด์ŠคํŒ…)

ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์— ํฐ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค.
ํ•˜์ง€๋งŒ ์„ ์–ธ์ „ ์ฝ”๋“œ ์‚ฌ์šฉ์€ ๊ธฐ๋ณธ ๊ทœ์น™์— ์–ด๊ธ‹๋‚œ๋‹ค.
Lint ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธ์ „์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ํ๋ฆ„์˜ ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. let, const

var ์˜ ํ˜ธ์ด์ŠคํŒ…๊ณผ let, const ์˜ ํ˜ธ์ด์ŠคํŒ…์€ ๋‹ค๋ฅด๋‹ค.
let ๊ณผ const ๋Š” ๊ฐ’์˜ ํ• ๋‹น์ „์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
let, const ๋Š” TDZ (temporal dead zone) ์— ์†ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ• ๋‹น์ „์— ์ ‘๊ทผํ•˜๋ คํ•œ๋‹ค๋ฉด, ReferenceError ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

https://github.com/ajzawawi/js-interview-prep/blob/master/answers/es6/temporal-dead-zone.md

๏ธ๐ŸŒธ ํด๋กœ์ €

ํด๋กœ์ €๋Š” ์ƒ์„ฑ๋œ ๋‹น์‹œ์˜ ์Šค์ฝ”ํ”„์ฒด์ธ์„ ๊ธฐ์–ตํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  1. ์Šค์ฝ”ํ”„์ฒด์ธ

inner ๋‚ด๋ถ€์—์„œ num ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ คํ•œ๋‹ค.
์ œ์ผ ๋จผ์ € inner์˜ ๋‚ด๋ถ€์—์„œ num ์„ ์ฐพ์œผ๋ คํ•˜๋Š”๋ฐ, inner ๋‚ด๋ถ€์—๋Š” num ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋•Œ ๋‹ค์Œ์œผ๋กœ inner ๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” outer ์—์„œ num ์„ ์ฐพ์œผ๋ คํ•˜๋Š”๋ฐ, ์ด์ฒ˜๋Ÿผ ๋‚ด๋ถ€์—์„œ ๋ฐ–์œผ๋กœ ์ด์–ด์ง€๋Š” ์Šค์ฝ”ํ”„๋ฅผ ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด๋ผ๊ณ ํ•œ๋‹ค.

2. ํด๋กœ์ €

  • outer ๋Š” inner ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • inner ๋Š” ์ƒ์„ฑ ๋‹น์‹œ์˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ๊ธฐ์–ตํ•˜๊ณ ์žˆ๋‹ค.
  • foo ๋ผ๋Š” ๋ณ€์ˆ˜์— outer ์˜ return ๊ฐ’์ธ inner (๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ๊ธฐ์–ตํ•˜๊ณ ์žˆ๋Š”)๋ฅผ ๋‹ด์•˜๋‹ค.
  • foo() ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Š” inner() ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. inner ๋Š” ์Šค์ฝ”ํ”„์ฒด์ธ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— outer ์˜ num ๊นŒ์ง€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๊ฒฐ๊ณผ์ ์œผ๋กœ num ์—๋Š” 10 ์ด ์ถœ๋ ฅ๋œ๋‹ค.

์–ธ์ œ ํด๋กœ์ €๋ฅผ ์ด์šฉํ• ๊นŒ ?

  • private ์ ‘๊ทผ์ œ์–ด: Javascript ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด์ž๋ผ๋Š” ๊ฐ’์ด ์—†๋‹ค. private ํ•˜๊ฒŒ ๊ฐ’์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์Šค์ฝ”ํ”„๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋•Œ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด count ๋ณ€์ˆ˜๋ฅผ ์ˆจ๊ธฐ๋ฉฐ ๊ฐ’์„ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋“ค์˜ ์กฐํ•ฉ

add ๋ผ๋Š” ํ•จ์ˆ˜๋Š” a ๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›์•„ ์ƒˆ๋กœ์šด b ๋ผ๋Š” ์ธ์ž์™€ ๋”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜(๊ธฐ์กด์˜ a ๋ฅผ ์ฐธ์กฐํ•œ ์ƒํƒœ๋กœ ๋ฆฌํ„ด๋œ๋‹ค)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
์šฐ๋ฆฌ๋Š” add ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์˜ค๋”๋ผ๋„ 10 ์„ ๋”ํ•ด์ฃผ๋Š” add10 ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฃจํ”„ ๋‚ด๋ถ€์˜ ํด๋กœ์ €: ํด๋กœ์ €๊ฐ€ ๊ฐ€์ง„ ์Šค์ฝ”ํ”„ ๋ฌธ์ œ

๊ต‰์žฅํžˆ ์œ ๋ช…ํ•œ ๋‹จ๊ณจ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. for ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ setTimeout ์ด ๋ˆ๋‹ค. ๋‹น์—ฐํžˆ ํ•ด๋‹น setTimeout callback ์€ 0 ์˜ time ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น๋ฒˆ์งธ์˜ index ๊ฐ€ ์ฐํž ๊ฒƒ ์ด๋ผ๋Š” ๊ธฐ๋Œ€๋ฅผ ๊ฐ€์ง€๊ฒŒํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ๋Œ€ํ–ˆ๋˜ ๊ฒฐ๊ณผ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ i ์—๋Š” 6 ์ด๋ผ๋Š” ๊ฐ’์ด ์ฐํžˆ๊ฒŒ๋˜๋Š”๋ฐ, ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด setTimeout ์ด ๋™์ž‘ํ•˜๋Š”๊ณณ๊ณผ for ๋ฌธ์ด ๋™์ž‘ํ•˜๋Š” ๊ณณ์ด๋‹ค๋ฅด๋‹ค. for ๋ฌธ์ด ๋จผ์ € ๋™์ž‘ํ•˜๊ณ  for ์˜ ๋™์ž‘์ด ๋๋‚˜๋ฉด setTimeout ์ด ํ˜ธ์ถœ๋œ๋‹ค. ์ด๋•Œ๋Š” ์ด๋ฏธ i ๊ฐ€ 6์ด๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— console ์—๋Š” 6์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์ฆ‰์‹œ ์‹คํ–‰ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด index๋ณ„๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐˆ๋ผ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

๋˜๋Š” let ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

let ์€ for ๋ฌธ์—์„œ ํŠน์ดํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ babel ์„ ํ†ต๊ณผํ•˜์—ฌ transpile ์ด ๋œ๋‹ค๋ฉด, setTimeout ๋ถ€๋ถ„์„ ๋ณ„๋„์˜ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘์ด ๋˜๋„๋ก ๋ณ€๊ฒฝํ•œ๋‹ค.

๏ธ๐ŸŒธ This

This ๋Š” ํ˜ธ์ถœํŒจํ„ด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœํŒจํ„ด, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํŒจํ„ด, ์ƒ์„ฑ์ž ํ˜ธ์ถœํŒจํ„ด.
ํฌ๊ฒŒ 3 ๊ฐ€์ง€์˜ ํŒจํ„ด์ด ์žˆ๋‹ค.

  1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ํŒจํ„ด

๋จผ์ € ๊ธฐ๋ณธ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.
์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ํ˜ธ์ถœ ํŒจํ„ด์—์„œ์˜ this ๋Š” window ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํŒจํ„ด

ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ผ๋ฉด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํŒจํ„ด์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ, ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜ํ˜ธ์ถœ ํŒจํ„ด์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. ์ƒ์„ฑ์ž ํ˜ธ์ถœํŒจํ„ด

ํ•จ์ˆ˜์— new ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ์‹คํ–‰์„ ํ•˜๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•œ๋‹ค.
์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ์ „ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ๊ฐ์ฒด๋Š” this ๋กœ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” this ๋Š” ์ด ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

4. Arrow Function

ArrowFunction ์—๋Š” this ๊ฐ€ ์—†๋‹ค. ํŠน์ดํ•˜๊ฒŒ๋„ Arrow Function ์˜ this ๋Š” ์ƒ์œ„ scope์˜ this ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๏ธ๐ŸŒธ ํ”„๋กœํ† ํƒ€์ž…

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž์‹ ์˜ ๋ถ€๋ชจ๊ฒฉ์ธ ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์œ„์—์„œ __proto__ ๊ฐ€ ๋ถ€๋ชจ๊ฒฉ์ธ ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋œ ๋งํฌ์ด๋‹ค.

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ prototype ์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ ์ด๋Š” ์ž๊ธฐ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋งํฌ์ด๋‹ค. prototype ์€ constructor ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์ด๋‹ค.

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์€ ๋ถ€๋ชจ๊ฒฉ์ธ ๊ฐ์ฒด๋กœ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜prototype ๊ณผ ๋งํฌ๊ฐ€ ์—ฐ๊ฒฐ๋œ๋‹ค.

Person ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“  ๊ฐ์ฒด์ด๋‹ค. __proto__ ์—์„œ Person ์ƒ์„ฑ์ž์˜ prototype ๊ฐ์ฒด์™€ ๋งํฌํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋Š” Object ์— ๋งํฌ๋œ๋‹ค. Object ๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ข…์ ์ด๋‹ค.

prototype ์€ constructor ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ผ๊ณ ํ–ˆ๋‹ค. ์ด ๋ง์€ ํ”„๋กœํผํ‹ฐ ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด Person ์˜ prototype ๊ฐ์ฒด์— getName ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  olaf ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด olaf.getName ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. olaf ๋ผ๋Š” ๊ฐ์ฒด๋Š” getName ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜์•ผ ์ •์ƒ์ด์ง€๋งŒ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฆ„์ด ์ถœ๋ ฅ๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  1. olaf.getName ์„ ์‹คํ–‰ํ•˜๊ฒŒ๋˜๋ฉด ์ž๊ธฐ ์ž์‹ ์—์„œ ๋จผ์ € getName ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์œผ๋ ค ํ•  ๊ฒƒ์ด๋‹ค.
  2. ํ•˜์ง€๋งŒ getName ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๋•Œ Person ๊ณผ ์—ฐ๊ฒฐ๋œ ํ”„๋กœํ† ํƒ€์ž… ๋งํฌ๋ฅผ ์ฐพ์•„๊ฐ€๊ฒŒ๋˜๋Š”๋ฐ, Person ์€ getName ์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. olaf ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค.
  3. ์ด์ฒ˜๋Ÿผ ์ž์‹ ์˜ ์˜์—ญ์—์„œ ๋ถ€๋ชจ ํ”„๋กœํ† ํƒ€์ž… ์˜์—ญ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ฐพ๋Š”๊ฒƒ์„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด๋ผ๊ณ ํ•œ๋‹ค.

์ด๋Ÿฐ ๊ฐœ๋…์„ ์ด์šฉํ•˜๋ฉด class ์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒ์† ๋˜ํ•œ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ์ค‘๋ณต๋œ ํ•จ์ˆ˜๋“ค์„ ํ”„๋กœํ† ํƒ€์ž… ์˜์—ญ์— ๋„ฃ์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Sign up to discover human stories that deepen your understanding of the world.

--

--

๊ณ ์„์ง„
๊ณ ์„์ง„

Written by ๊ณ ์„์ง„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ๋ž‘ํ•˜๋Š” ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค :)

No responses yet

Write a response