๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“บ Front End/- HTML,css,Javascript

[Javascript-Core] ๋ณ€์ˆ˜์˜ ์„ ์–ธ var๊ณผ let ๊ทธ๋ฆฌ๊ณ const์˜ ์ฐจ์ด :: Difference among var and let and const

by Wonit 2019. 11. 29.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฑ…์„ ๋ดค์„ ๋•Œ, ๋Œ€๋ถ€๋ถ„์˜ ์ฑ…์—์„œ var์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ผ๊ณ  ๊ฐ€๋ฅด์นœ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์˜ˆ์ „์— ์†Œ๋งˆ๋ฅผ ์ค€๋น„ํ•  ๋•Œ ์†Œ๋งˆ ์‹œํ—˜์„ ์œ„ํ•ด ์ž ๊น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ–ˆ๋˜ ์ ์ด ์žˆ๋Š”๋ฐ, ๊ทธ ๋•Œ var๋Œ€์‹  let์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ผ๊ณ  ํ–ˆ๋˜ ๊ธ€์„ ๋ณธ ์ ์ด ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ทธ ๋‘ ์ฐจ์ด์ ์„ ํ™•์‹คํžˆ ๋น„๊ตํ•ด๋ณด๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž.

 

๊ฒฐ๋ก 

  var let const
์žฌ์„ ์–ธ O X X
์žฌํ• ๋‹น O O X
์ƒ์กด ๋ฒ”์œ„ Funtion Scope(ํ•จ์ˆ˜) Block Scope(์ค‘๊ด„ํ˜ธ) Block Scope(์ค‘๊ด„ํ˜ธ)

๋ณ€์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋ณ€์ˆ˜๋Š” variable์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ทธ๋ฆ‡์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.


์šฐ๋ฆฌ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด์„œ ํŠน์ • ๊ฐ’์„ ๋„์ถœํ•ด ๋‚ด๊ณ  ๊ทธ ํŠน์ • ๊ฐ’์„ ์ €์žฅ, ์‚ฌ์šฉ, ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ๋ณ€์ˆ˜๋Š” var ๋กœ ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์—๋Š” ์กฐ๊ทธ๋งˆํ•œ ์˜ค๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

var a = 10;
console.log(a);

var a = 'Hello world'
console.log(a);

์ง€๊ธˆ ๋‹ค๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒซ ์–ธ์–ด๋กœ ํ•˜๋Š” ๋…์ž๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํ•ด๋ดค๋˜ ๋…์ž๋Š” ์ด ๋ถ€๋ถ„์ด ๋ญ”๊ฐ€ ์ด์ƒํ•˜๋‹ค๊ณ  ๋Š๋‚„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋ฐ”๋กœ ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์ด๋‹ค.

 

์ด๋Ÿฌํ•œ ์ค‘๋ณต ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

๋ณ€์ˆ˜์˜ ์ƒ์กด ๋ฒ”์œ„

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ var ๋ณ€์ˆ˜์˜ ์ƒ์กด ๋ฒ”์œ„๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” Block Scope(๋ธ”๋ก ๋‹จ์œ„)๋ผ๊ณ  ํ•ด์„œ

for(int i = 0; i < 10; i++){
    System.out.println(i);
}

for(int i = 10; i > 0; i--){
    System.out.println(i);
}

์ด๋Ÿฐ ์ž๋ฐ” for๋ฌธ์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ { ... } ์ค‘๊ด„ํ˜ธ์˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด ์ƒ์กด ๋ฒ”์œ„๊ฐ€ ๋๋‚˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜์˜ ์ƒ์กด ๋ฒ”์œ„๋Š” Function Scope ํ•จ์ˆ˜ ๋‹จ์œ„๋ผ์„œ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋Š” ๋™์ผํ•œ ์ƒํƒœ๋กœ ์œ ์ง€๊ฐ€ ๋œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์‚ฌ์‹ค.

 

์ค‘๊ด„ํ˜ธ๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค๊ณ  ํ•ด์„œ ์ƒ์กด ๋ฒ”์œ„๊ฐ€ ๋๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ™์€ ์ด๋ฆ„์˜ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๊ณ  ํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ํƒ„์ƒํ•œ๋‹ค.

 

  1. let
  2. const

์ฒœ์ฒœํžˆ ์•Œ์•„๋ณด์ž.

let ์˜ ์‚ฌ์šฉ

์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ var์„ ์‚ฌ์šฉํ•ด์„  ์•ˆ๋˜๋Š” ์ด์œ ๋กœ ์ค‘๋ณต ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•œ ์ ์„ ๋“ค์—ˆ๋‹ค. let์€ ๋ฐ”๋กœ ์ด ์ ์„ ์‹œ์›ํ•˜๊ฒŒ ๋ง‰์•„์ค€๋‹ค.

 

 

์•„๊นŒ๋ž‘ ๋‹ค๋ฅด๊ฒŒ var ์—์„œ let์œผ๋กœ ์„ ์–ธํ–ˆ๋‹ค๋ฉด ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ์ผ์–ด๋‚ ๊นŒ?

 

์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ คํ–ˆ๋˜ ๋ณ€์ˆ˜์˜ ์ค‘๋ณต ์„ ์–ธ์„ Identifier 'a' has already been declared ๋กœ ๋ง‰์•„์ค€๋‹ค.

 

๊ทธ๋Ÿฌํ•œ let์€ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ณ€์ˆ˜ ์ฒ˜๋Ÿผ

์ค‘๋ณต ์ •์˜๊ฐ€ ์•„๋‹Œ ๋™์  ํƒ€์ž… ํ• ๋‹น์„ ํ†ตํ•ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

const ์˜ ์‚ฌ์šฉ

const๋Š” let์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ธํ„ฐํ”„๋ฆฟ์„ ํ•œ๋‹ค๋ฉด?

๋‹น์—ฐํžˆ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋Ÿผ let ๊ณผ const์˜ ์ฐจ์ด๋Š” ๋ญ์•ผ?

์ œ๊ณง๋‚ด


let๊ณผ const์˜ ์ฐจ์ด์ ์ด ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด ๋ถ€๋ถ„์€ Immutable์ด๋ผ๋Š” ํ•œ ๋‹จ์–ด๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๊ฐ€ ์œ„์—์„œ const a ์žฌํ• ๋‹น์„ ํ•˜๋Š” ๋ณด์Šต์„ ์•ˆ ๋ณด์—ฌ์คฌ๋Š”๋ฐ, ๋ฐ”๋กœ ๊ทธ๊ฒŒ let๊ณผ const์˜ ์ฐจ์ด์ด๋‹ค.

 

const๋Š” ์ด๋ ‡๊ฒŒ ์žฌํ• ๋‹น์„ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.


๊ทธ๋Ÿผ ์™œ var์€ Deprecated ๋˜์ง€ ์•Š์•„?

๋ฐ”๋กœ ํ˜ธํ™˜์„ฑ๋•Œ๋ฌธ์ด๋‹ค.

 

์ง€๊ธˆ ์ธํ„ฐ๋„ท์ƒ์—๋Š” ์ˆ˜๋งŽ์€ js ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋‹จ์ง€ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์œ  ๋•Œ๋ฌธ์— ์„ธ์ƒ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  js์— var์„ let๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•  ์ˆ˜๋Š” ์—†๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ์กด์žฌํ•œ๋‹ค.

 

๋Œ“๊ธ€