/
๐Ÿ“™

JS Closure

JavaScript
Table of contents

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋กœ์ €(Closure)

ํด๋กœ์ €(closure)๋Š” ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์ด ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜, ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋  ๋•Œ์˜ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•˜์˜€๋‹ค๊ฐ€ ์ž์‹ ์ด ์„ ์–ธ ๋˜์—ˆ์„ ๋•Œ์˜ ํ™˜๊ฒฝ์ด ์•„๋‹Œ ๊ณณ์—์„œ ํ˜ธ์ถœ๋˜์–ด๋„ ์ž์‹ ์ด ์„ ์–ธ๋œ ํ™˜๊ฒฝ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

ํ•จ์ˆ˜๋Š” ์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•œ๋‹ค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— '์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์˜ ์ฐธ์กฐ'๋ฅผ ์ €์žฅํ•œ๋‹ค.

[[Environment]]์— ์ €์žฅ๋˜๋Š” '์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์˜ ์ฐธ์กฐ'๋Š” ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜์–ด 'ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ'์ด๋‹ค.

์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ = ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ

'ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ'์€ '์ƒ์„ฑ๋˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ'์ด๊ณ , ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด '์ž์‹ ์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„'๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ = ์ƒ์„ฑ๋˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ = ์ž์‹ ์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„

๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์—๋Š” '์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์ฐธ์กฐ'๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์˜ ์ฐธ์กฐ = ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์ฐธ์กฐ

ํ•จ์ˆ˜๋Š” ์ž์‹ ์ด ์กด์žฌํ•˜๋Š” ํ•œ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์˜ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ณด๋‹ค ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๊ธธ๋‹ค

์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ณด๋‹ค ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๋” ๊ธธ๋ฉด ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ฐ–์—์„œ ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

javascript
function outer() {
const x = 10;
const inner = function () { console.log(x); };
return inner;
}
const innerFunc = outer();
innerFunc();

์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด์„œ ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋Š” ์ข…๋ฃŒ๋˜๊ณ  ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.

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

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

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

  1. ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ข…๋ฃŒ๋˜๋ฉด์„œ ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋ฐ˜ํ™˜
    • ์ด๋•Œ, ๋ฐ˜ํ™˜๋œ ์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€(์ „์—ญ) ๋ณ€์ˆ˜์— ์˜ํ•ด ์ฐธ์กฐ ๋˜๊ณ  ์žˆ๋‹ค.
  2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์—์„œ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ œ๊ฑฐ
    • ๋ฐ˜ํ™˜๋œ ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.
  3. ๋ฐ˜ํ™˜๋œ ์ค‘์ฒฉ ํ•จ์ˆ˜ ํ˜ธ์ถœ
  4. ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ
  5. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์— push
    • ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฐธ์กฐ ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ณด๋‹ค ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜์–ด์•ผ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์— ์ƒ๊ด€์—†์ด ์–ธ์ œ๋‚˜ ์ž์‹ ์ด ๊ธฐ์–ตํ•˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹๋ณ„์ž์— ๋ฐ”์ธ๋”ฉ ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์ ํ™”๊ฐ€ ๋˜์–ด์žˆ์–ด ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ๋ชจ๋“  ์‹๋ณ„์ž๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š๊ณ  ํด๋กœ์ €๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์‹๋ณ„์ž๋งŒ์„ ๊ธฐ์–ตํ•˜๋ฉฐ, ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์–ด๋–ค ์‹๋ณ„์ž๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ํด๋กœ์ €์— ์˜ํ•ด ์ฐธ์กฐ๋˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์ž์œ  ๋ณ€์ˆ˜(free variable)๋ผ ํ•œ๋‹ค.

์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ณ  ์‹๋ณ„์ž์— ๋ฐ”์ธ๋”ฉ ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํด๋กœ์ €๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋กœ์ €์˜ ์กฐ๊ฑด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ [[Environment]]์— ์ž์‹ ์ด ์ •์˜๋œ ํ™˜๊ฒฝ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ก ์ ์œผ๋กœ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ํด๋กœ์ € ์ด์ง€๋งŒ ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ณ  ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ณด๋‹ค ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ์— ํ•œ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

  1. ์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ต(์ €์žฅ)ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ณด๋‹ค ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์•ผ ํ•œ๋‹ค.
  3. ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํด๋กœ์ €์˜ ํ™œ์šฉ

ํด๋กœ์ €๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ํ•˜์ง€๋งŒ ์ž˜๋ชป ์‚ฌ์šฉํ• ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ์ˆ˜ ์žˆ๋‹ค.

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

ํŠนํžˆ ์ƒํƒœ ๋ณ€๊ฒฝ์ด๋‚˜ ๊ฐ€๋ณ€(mutable) ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผํ•˜๊ณ  ๋ถˆ๋ณ€์„ฑ(Immutability)์„ ์ง€ํ–ฅ ํ•˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ถ€์ˆ˜ ํšจ๊ณผ(Side effect)๋ฅผ ์ตœ๋Œ€ํ•œ ์–ต์ œ ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํด๋กœ์ €๋Š” ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ƒํƒœ ์œ ์ง€
  • ์ •๋ณด์˜ ์€๋‹‰
  • ์ „์—ญ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ์–ต์ œ

์บก์Šํ™”

์บก์Šํ™”(encapsulation)๋Š” ์ •๋ณด์˜ ์ผ๋ถ€๋ฅผ ์™ธ๋ถ€์— ๊ฐ์ถ”์–ด ์€๋‹‰(information hiding)ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์™ธ๋ถ€์— ๊ณต๊ฐœํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ตฌํ˜„์˜ ์ผ๋ถ€๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜์ง€ ์•Š๋„๋ก ๊ฐ์ถ”์–ด ์ ์ ˆ์น˜ ๋ชปํ•œ ์ ‘๊ทผ์œผ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด์„ฑ(๊ฒฐํ•ฉ๋„)๋ฅผ ๋‚ฎ์ถœ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜์–ด ์žˆ์–ด ๊ธฐ๋ณธ์ ์œผ๋กœ publicํ•˜๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์บก์Šํ™”๋ฅผ ์™„์ „ํ•˜๊ฒŒ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ž์œ  ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด private๋ฅผ ํ‰๋‚ด ๋‚ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋งˆ์ €๋„ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ES6์˜ Symbol ๋˜๋Š” WeakMap์„ ์‚ฌ์šฉํ•˜์—ฌ privateํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ‰๋‚ด ๋‚ด๊ธฐ๋„ ํ–ˆ์œผ๋‚˜ ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

TC39 stage 3, ํด๋ž˜์Šค์— private ํ•„๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ‘œ์ค€ ์‚ฌ์–‘์ด ์ œ์•ˆ๋˜์–ด ์žˆ๋‹ค.

tc39/proposal-class-fields

์ •๋ฆฌ

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

  • ํ˜ธ์ถœ๋œ ๊ณณ์— ์ƒ๊ด€์—†์ด ์ž์‹ ์ด ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ํ™˜๊ฒฝ์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
  • ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๋งˆ๊ฐ๋˜๊ณ  ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์—์„œ ์ œ๊ฑฐ ๋˜์–ด๋„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
logo
Things I've Learned