๐Ÿ“– ์Šค์ฝ”ํ”„

c_yjยท2022๋…„ 6์›” 26์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
10/42
post-thumbnail

โœ”๏ธ ์Šค์ฝ”ํ”„๋ž€?

๋ชจ๋“  ์‹๋ณ„์ž(๋ณ€์ˆ˜ ์ด๋ฆ„, ํ•จ์ˆ˜ ์ด๋ฆ„, ํด๋ž˜์Šค ์ด๋ฆ„ ๋“ฑ)๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹๋ณ„์ž ์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. ์ด๋ฅผ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค. ์ฆ‰, ์Šค์ฝ”ํ”„๋Š” ์‹๋ณ„์ž๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค.

var x = 'global';

function foo() {
  var x = 'local';
  console.log(x);
}

foo();

console.log(x);

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

โœ”๏ธ ์Šค์ฝ”ํ”„์˜ ์ข…๋ฅ˜

์ „์—ญ์ด๋ž€ ์ฝ”๋“œ์˜ ๊ฐ€์žฅ ๋ฐ”๊นฅ ์˜์—ญ์„ ๋งํ•œ๋‹ค. ์ „์—ญ์€ ์ „์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค. ์ „์—ญ์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ „์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์–ด๋””์„œ๋“ ์ง€ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ง€์—ญ์ด๋ž€ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€๋ฅผ ๋งํ•œ๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์ž์‹ ์˜ ์ง€์—ญ ์Šค์ฝ”ํ”„์™€ ํ•˜์œ„ ์ง€์—ญ ์Šค์ฝ”ํ”„์—์„œ ์œ ํšจํ•˜๋‹ค

โœ”๏ธ ์Šค์ฝ”ํ”„ ์ฒด์ธ

์ค‘์ฒฉ๋œ ํ•จ์ˆ˜๋“ค์ด ์ง€์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์งˆ ๋•Œ์™€ ๊ฐ™์ด ์Šค์ฝ”ํ”„๊ฐ€ ๊ณ„์ธต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

โœ”๏ธ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„

์ง€์—ญ์€ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€๋ฅผ ๋งํ•˜๊ณ  ์ง€์—ญ์€ ์ง€์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ด ์•„๋‹Œ ํ•จ์ˆ˜์— ์˜ํ•ด์„œ๋งŒ ์ง€์—ญ ์Šค์ฝ”ํ”„๊ฐ€ ์ƒ์„ ๋œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

C๋‚˜ ์ž๋ฐ” ๋“ฑ์„ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด๋งŒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ฝ”๋“œ ๋ธ”๋ก(if, for, while, try/catch ๋“ฑ)์ด ์ง€์—ญ ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค.

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์˜ค๋กœ์ง€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ๋ธ”๋ก(ํ•จ์ˆ˜ ๋ชธ์ฒด)๋งŒ์„ ์ง€์—ญ ์Šค์ฝ”ํ”„๋กœ ์ธ์ •ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค.

ES6์—์„œ ๋„์ž…๋œ let, const ํ‚ค์›Œ๋“œ๋Š” ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•œ๋‹ค.

โœ”๏ธ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„

var x = 1;

function foo(){
  var x = 10;
  bar();
}

function bar(){
  console.log(x);
}

foo(); // ?
bar(); // ?
  • ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    ๋™์  ์Šค์ฝ”ํ”„๋ผํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ์‹œ์ ์—๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์„œ ํ˜ธ์ถœ๋ ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ๋™์ ์œผ๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋–„๋ฌธ์— ๋™์  ์Šค์ฝ”ํ”„๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„ ๋˜๋Š” ์ •์  ์Šค์ฝ”ํ”„๋ผ ํ•œ๋‹ค. ๋™์  ์Šค์ฝ”ํ”„ ๋ฐฉ์‹์ฒ˜๋Ÿผ ์‚ฌ์šฐ์ด ์Šค์ฝ”ํ”„๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์— ์ƒ์œ„ ์Šค์ฝ”ํ”„๊ฐ€ ์ •์ ์œผ๋กœ ๊ฒฐ์ •๋˜๊ธฐ ๋–„๋ฌธ์— ์ •์  ์Šค์ฝ”ํ”„๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋กฏํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ๋”ฐ๋ฅด๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ–ˆ๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์ •์˜ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์œ„์น˜๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๊ฒฐ์ •์— ์–ด๋– ํ•œ ์˜ํ–ฅ๋„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ํ•จ์ˆ˜์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ์–ธ์ œ๋‚˜ ์ž์‹ ์ด ์ •์˜๋œ ์Šค์ฝ”ํ”„๋‹ค.

profile
FrontEnd Developer

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