๐Ÿชข ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋กœ์ €

thumb_hyeokยท2022๋…„ 4์›” 1์ผ
0

๐ŸŸกย JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
9/15
post-thumbnail
post-custom-banner

์ด ๊ธ€์„ ์ฝ์„ ๋•Œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ์ด๋ฏธ ๋‚ด๊ฐ€ ์จ๋‘” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์Šค์ฝ”ํ”„ ๊ธ€์„ ์ฝ์—ˆ๋‹ค๋ฉด ์ƒ๊ด€์—†๊ฒ ์ง€๋งŒ ์•„์ง ์ดํ•ด๊ฐ€ ์•ˆ ๋๊ฑฐ๋‚˜, ์ฝ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ฝ๊ณ  ์˜ค๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

โžก๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šค์ฝ”ํ”„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์ฝ๊ณ  ์™”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ด์ „์— ๋‹ค๋ฃฌ ๋‚ด์šฉ์€ ์ƒ๋žตํ•˜๊ณ  ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.


๐Ÿ”ฌ ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]

ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— ์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์ธ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ํ˜ธ์ถœ๋  ๋•Œ, ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ OuterEnvironmentReference์— ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— ์ €์žฅ๋œ Lexical Environment์˜ ์ฐธ์กฐ๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ•จ์ˆ˜ ์ •์˜ ์œ„์น˜์— ๋”ฐ๋ผ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„์˜ ์‹ค์ฒด๋‹ค.


๐Ÿ”’ ํด๋กœ์ €์™€ Lexical Environment

์™ธ๋ถ€ ํ•จ์ˆ˜๋ณด๋‹ค ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ ์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ์ด๋ฏธ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์ข…๋ฃŒํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํด๋กœ์ €(closure)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์–ด๋–ค ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์„ ๋•Œ, ๊ทธ ํ•จ์ˆ˜์˜ Lexical Environment๊นŒ์ง€ ์†Œ๋ฉธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋งŒ์•ฝ์— ๊ทธ ํ•จ์ˆ˜์˜ Lexical Environment๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•ด์ฒด๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด ๋•Œ, ๊ทธ ํ•จ์ˆ˜์˜ Lexical Environment๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ ํ•จ์ˆ˜์˜ ์ค‘์ฒฉํ•จ์ˆ˜ ์ผ ๋•Œ, ๊ทธ ์ค‘์ฒฉํ•จ์ˆ˜๋ฅผ ํด๋กœ์ €๋ผ๊ณ  ํ•œ๋‹ค. ์ด ๋•Œ, ํด๋กœ์ €๋Š” ๊ทธ ํ•จ์ˆ˜์˜ ์–ด๋–ค ์‹๋ณ„์ž๋ผ๋„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์–ด์•ผํ•˜๊ณ , ๊ทธ ํ•จ์ˆ˜๋ณด๋‹ค ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์•ผํ•œ๋‹ค.

์–ด๋–ค ์‹๋ณ„์ž๋ผ๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋Ÿฌ๋ฉด ๋‹น์—ฐํžˆ ํด๋กœ์ €์˜ ๋ณธ์งˆ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜์ธ ๊ทธ ํ•จ์ˆ˜๋ณด๋‹ค ์ค‘์ฒฉํ•จ์ˆ˜๊ฐ€ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์งง๋‹ค๋ฉด ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์ข…๋ฃŒํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ํด๋กœ์ €์˜ ๋ณธ์งˆ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํด๋กœ์ €์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์ž์œ  ๋ณ€์ˆ˜(free variable)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํด๋กœ์ €๋ž€ โ€œ์ž์œ  ๋ณ€์ˆ˜์— ๋ฌถ์—ฌ์žˆ๋Š” ํ•จ์ˆ˜"๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.


โš™๏ธ ํด๋กœ์ €์˜ ํ™œ์šฉ

ํด๋กœ์ €๋Š” ์ƒํƒœ(state)๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ƒํƒœ๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์€๋‹‰(information hiding)ํ•˜๊ณ  ํŠน์ • ํ•จ์ˆ˜์—๊ฒŒ๋งŒ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
(๊ทผ๋ฐ ํด๋ž˜์Šค์—์„œ private ํ•„๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ๋‹น์— ๊ตณ์ด ํด๋กœ์ €๋ฅผ ์จ์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ๋‚˜๋Š” ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์™ธ์—๋„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™์œผ๋‚˜, ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„(...) ๊ตณ์ด ๊ธ€์— ์“ฐ์ง€๋Š” ์•Š๊ฒ ๋‹ค.)


๐Ÿง ์ •๋ฆฌ

  • ํด๋กœ์ €๋ž€ ์ด๋ฏธ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์ข…๋ฃŒํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

๐Ÿ“– ์ฐธ๊ณ ์ž๋ฃŒ

  • ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive
      1. ํด๋กœ์ € (389p~413p)
  • ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      1. ํด๋กœ์ € (115p~145p)
  • YOU DONโ€™T KNOW JS
    • CHAPTER 5. ์Šค์ฝ”ํ”„ ํด๋กœ์ € (239p~255p)
profile
์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 4๊ธฐ ์›น ํ”„๋ก ํŠธ์—”๋“œ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€