λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
[개발] Practice/JavaScript ES6

[JavaScript / ES6] λ³€μˆ˜ 신문법 μ΄μ •λ¦¬ν•˜κΈ°

by Connecting-the-dots 2022. 4. 11.
728x90
λ°˜μ‘ν˜•

πŸ’‘ μ‹€μŠ΅ 포인트!

πŸ“Œ JavaScript μ—μ„œ λ³€μˆ˜ μ‚¬μš©ν•˜κΈ°

var name = 'Seoyun';
  • λ³€μˆ˜λŠ” 자료λ₯Ό μž„μ‹œλ‘œ μ €μž₯ν•˜λŠ” 곡간이닀.
  • var λΌλŠ” ν‚€μ›Œλ“œμ˜ 였λ₯Έμͺ½μ— λ³€μˆ˜ 이름을 짓고, λ³€μˆ˜μ— μ €μž₯ν•  자료λ₯Ό λ“±ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ λ„£μ–΄μ£Όλ©΄ λœλ‹€.
  • λ³€μˆ˜μ—λŠ” object, array, function λ“± λͺ¨λ“  자료λ₯Ό 담을 수 μžˆλ‹€.
  • var name μ΄λΌλŠ” 뢀뢄은 μ„ μ–Έ, name='Seoyun' μ΄λΌλŠ” 뢀뢄은 κ°’ 할당이라고 ν‘œν˜„ν•˜λ©°, 일반적으둜 λ³€μˆ˜λ₯Ό λ§Œλ“€ λ•Œμ—λŠ” μ„ μ–Έκ³Ό 할당을 λ™μ‹œμ— μ‚¬μš©ν•œλ‹€.
  • λ³€μˆ˜λ₯Ό λ§Œλ“€ λ•Œμ—λŠ” var 외에도 let, const λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©κ°€λŠ₯ν•œλ°, λ‹€λ§Œ ν‚€μ›Œλ“œλ§ˆλ‹€ μ„ μ–Έ, ν• λ‹Ή, λ²”μœ„μ—μ„œ 차이가 μžˆλ‹€.

πŸ’œ var

🀍 μž¬μ„ μ–Έ O

var name1 = 'name1-1';
var name1 = 'name1-2';
  • 맨 μ²˜μŒμ— var ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ name1 μ΄λΌλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ˜€μŒμ—λ„, λ‘λ²ˆμ§Έμ€„μ²˜λŸΌ λ‹€μ‹œ var ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ™μΌν•˜κ²Œ name1 μ΄λΌλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.

🀍 μž¬ν• λ‹Ή O

var name1 = 'name1-1';
name1 = 'name1-3';
  • λ³€μˆ˜μ— 값을 μž¬ν• λ‹Ήν•œλ‹€λŠ” 것은 μœ„ μ½”λ“œμ²˜λŸΌ λ§¨μ²˜μŒμ— λ³€μˆ˜λ₯Ό λ§Œλ“€μ–΄ 할당해놓은 μƒνƒœμ—μ„œ, λ‘λ²ˆμ§Έμ€„μ—μ„œ 이미 λ§Œλ“€μ–΄λ†“μ€ name1 μ΄λΌλŠ” λ³€μˆ˜μ— 'name1-3' μ΄λΌλŠ” 값을 μ§‘μ–΄λ„£λŠ” 것을 λ§ν•œλ‹€.
    (할당은 값을 ν• λ‹Ήν•˜μ§€ μ•Šκ³  λ³€μˆ˜λ§Œ λ§Œλ“€μ–΄λ†“μ€ μƒνƒœμ—μ„œ, λ‚˜μ€‘μ— λ³€μˆ˜μ— 값을 μ§‘μ–΄λ„£λŠ” 것을 λ§ν•˜λ©°, λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό 할당은 λ™μ‹œμ—λ„ κ°€λŠ₯ν•˜λ‹€.)

🀍 λ²”μœ„ : function scope

function func1(){
  var name1 = 'Seoyun';
  console.log(name1);  // Seoyun
}

console.log(name1);  // μ—λŸ¬
  • λͺ¨λ“  λ³€μˆ˜μ—λŠ” μ‘΄μž¬ν•  수 μžˆλŠ” λ²”μœ„κ°€ μ •ν•΄μ ΈμžˆλŠ”λ°, var λ³€μˆ˜λŠ” 쑴재 λ²”μœ„κ°€ function 이닀.
  • μœ„μ²˜λŸΌ var λ³€μˆ˜λ₯Ό function λ‚΄μ—μ„œ λ§Œλ“€λ©΄ function λ‚΄μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, function 의 μ™ΈλΆ€μ—μ„œ λΆ€λ₯΄λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
  • 즉, μ΄λŸ¬ν•œ function scope λ₯Ό κ°€μ§€λŠ” λ³€μˆ˜λŠ” ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έλ˜λ©΄ ν•¨μˆ˜ λ°–μ—μ„œ μ ‘κ·Όν•˜μ§€ λͺ»ν•œλ‹€. ν•˜μ§€λ§Œ 블둝 μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 블둝 λ°–μ—μ„œ μ°Έμ‘°κ°€ κ°€λŠ₯ν•˜λ‹€.

πŸ’œ let

🀍 μž¬μ„ μ–Έ X

let age2 = 10;
let age2 = 20;  // μ—λŸ¬
  • let ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό λ§Œλ“€λ©΄ 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό 두 번 이상 μž¬μ„ μ–Έν•  수 μ—†λ‹€.
  • λ§Œμ•½ μž¬μ„ μ–Έν•˜κ²Œ λœλ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ”λ°, μ΄λŠ” λ‚˜μ€‘μ— λ³€μˆ˜ 이름을 μ‹€μˆ˜λ‘œ μ€‘λ³΅ν•΄μ„œ λ§Œλ“œλŠ” μ‹€μˆ˜λ₯Ό 방지해주기 μœ„ν•¨μ΄λ‹€.

🀍 μž¬ν• λ‹Ή O

let age2 = 10;
age2 = 30;  // κ°€λŠ₯
  • let ν‚€μ›Œλ“œλ„ var ν‚€μ›Œλ“œμ™€ λ™μΌν•˜κ²Œ μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€.

🀍 λ²”μœ„ : block scope

if (true) {
    let age2 = 50;
    console.log(age2);  // 50
}

console.log(age2);  // μ—λŸ¬
  • let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œ λ§Œλ“€μ—ˆμ„ λ•Œ μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.
  • λ”°λΌμ„œ, μ€‘κ΄„ν˜Έμ˜ μ™ΈλΆ€μ—μ„œ λΆ€λ₯΄λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
  • 즉, μ΄λŸ¬ν•œ block scope λ₯Ό κ°€μ§€λŠ” λ³€μˆ˜λŠ” μ€‘κ΄„ν˜Έ μ•ˆμ—μ„œ μ„ μ–Έλ˜λ©΄ μ€‘κ΄„ν˜Έ λ°–μ—μ„œ μ°Έμ‘°κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.

πŸ’œ const

🀍 μž¬μ„ μ–Έ X 

const place3 = 'place3-1';
const place3 = 'place3-2';  // μ—λŸ¬
  • const ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό λ§Œλ“€λ©΄ let ν‚€μ›Œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό 두 번 이상 μž¬μ„ μ–Έν•  수 μ—†λ‹€.
  • λ§Œμ•½ μž¬μ„ μ–Έν•˜κ²Œ λœλ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ”λ°, μ΄λŠ” λ‚˜μ€‘μ— λ³€μˆ˜ 이름을 μ‹€μˆ˜λ‘œ μ€‘λ³΅ν•΄μ„œ λ§Œλ“œλŠ” μ‹€μˆ˜λ₯Ό 방지해주기 μœ„ν•¨μ΄λ‹€.

🀍 μž¬ν• λ‹Ή X

const place3 = 'place3-1';
place3 = 'place3-3';  // λΆˆκ°€λŠ₯
  • var ν‚€μ›Œλ“œμ™€ let ν‚€μ›Œλ“œμ™€λŠ” 달리, const ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό λ§Œλ“€λ©΄ 값을 μž¬ν• λ‹Ήν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • 즉, const ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ λ‚˜μ€‘μ— λ“±ν˜Έλ₯Ό μ΄μš©ν•΄ 값을 λ³€κ²½ν•˜λŠ” 게 μ•ˆλœλ‹€λŠ” 것이닀.
  • μ• μ΄ˆμ— const λŠ” constant 의 μ•½μžλ‘œ λ°”λ€Œμ§€ μ•ŠλŠ” μΌμ •ν•œ 값을 μ˜λ―Έν•˜λ―€λ‘œ, 값이 λ°”λ€Œλ©΄ μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλŠ” κ²½μš°μ— μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.
// const 둜 object λ₯Ό λ§Œλ“€μ—ˆμ„ λ•Œ, object 의 λ‚΄λΆ€ 값을 변경해도 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. (const λ³€μˆ˜ 자체λ₯Ό μž¬ν• λ‹Ήν•œ 것이 μ•„λ‹ˆλ―€λ‘œ!)
const person1 = { name1 : 'Jihyeon'};
person1.name1 = 'Seoyun';  

// μˆ˜μ •μ΄ λΆˆκ°€λŠ₯ν•œ object λ₯Ό λ§Œλ“€κ³  싢을 λ•ŒλŠ” .freeze() μ‚¬μš©ν•˜λ©΄ λœλ‹€.
const person2 = { name2 : 'Jihyeon'};
Object.freeze(person2); // 이제 person2 object λ₯Ό μˆ˜μ •ν•˜μ§€ λͺ»ν•˜κ²Œ λœλ‹€.
person2.name2 = 'Seoyun';
  • const λ³€μˆ˜μ— object λ₯Ό λ‹΄μœΌλ©΄ object λ‚΄μ˜ λ°μ΄ν„°λŠ” 변경이 κ°€λŠ₯ν•˜λ‹€.
  • μ™œλƒν•˜λ©΄ 이 κ²½μš°λŠ” μ—„λ°€ν•˜κ²Œ λ§ν•˜μžλ©΄ λ³€μˆ˜λ₯Ό μž¬ν• λ‹Ήν•œ 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€.
  • μ™„μ „νžˆ λ³€κ²½λΆˆκ°€λŠ₯ν•œ object λ₯Ό λ§Œλ“€κ³  μ‹Άλ‹€λ©΄, Object.freeze() λΌλŠ” JavaScript λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    (ν•˜μ§€λ§Œ, object λ‚΄μ˜ object κΉŒμ§€ freeze ν•΄μ£Όμ§€λŠ” μ•ŠλŠ”λ‹€λŠ” 점을 κΈ°μ–΅ν•˜μž!.)

🀍 λ²”μœ„ : block scope

  • const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λ„ let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ™€ λ™μΌν•˜κ²Œ μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œ λ§Œλ“€μ—ˆμ„ λ•Œ μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.
  • λ”°λΌμ„œ, μ€‘κ΄„ν˜Έμ˜ μ™ΈλΆ€μ—μ„œ λΆ€λ₯΄λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
  • 즉, μ΄λŸ¬ν•œ block scope λ₯Ό κ°€μ§€λŠ” λ³€μˆ˜λŠ” μ€‘κ΄„ν˜Έ μ•ˆμ—μ„œ μ„ μ–Έλ˜λ©΄ μ€‘κ΄„ν˜Έ λ°–μ—μ„œ μ°Έμ‘°κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€.

 

 

 

728x90
λ°˜μ‘ν˜•