λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
javascript/πŸ“– study

[μŠ€ν„°λ”” 1μ£Όμ°¨] 6μž₯ 데이터 νƒ€μž…

by HomieKim 2022. 2. 4.

6μž₯ 데이터 νƒ€μž…

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 7개의 데이터 νƒ€μž…μ„ μ œκ³΅ν•©λ‹ˆλ‹€.(6개의 μ›μ‹œνƒ€μž… κ³Ό κ°μ²΄νƒ€μž…)

  • μ›μ‹œ νƒ€μž…
    숫자, λ¬Έμžμ—΄, λΆˆλ¦¬μ–Έ, undefined, null, symbol

  • 객체 νƒ€μž…
    객체, ν•¨μˆ˜ λ°°μ—΄ λ“±

숫자 νƒ€μž…

  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό κ΅¬λΆ„ν•΄μ„œ 데이터 νƒ€μž…μ„ μ§€κ³΅ν•˜μ§€ μ•Šκ³  ν•˜λ‚˜μ˜ Number νƒ€μž…λ§Œ μ‘΄μž¬ν•©λ‹ˆλ‹€.
  • 숫자 νƒ€μž…μ€ λͺ¨λ‘ μ‹€μˆ˜λ‘œ 처리됨 (64λΉ„νŠΈ λΆ€λ™μ†Œμˆ˜μ  ν˜•μ‹)
  • μ •μˆ˜, μ‹€μˆ˜, 2μ§„μˆ˜, 8μ§„μˆ˜, 16μ§„μˆ˜ λͺ¨λ‘ μˆ«μžνƒ€μž… 이며 이λ₯Ό μ°Έμ‘°ν•˜λ©΄ λͺ¨λ‘ 10μ§„μˆ˜λ‘œ 해석됨
var binary = 0b01000001; // 2μ§„μˆ˜
var octal = 0o101; // 8μ§„μˆ˜
var hex = 0x41; // 16μ§„μˆ˜

// ν‘œκΈ°λ²•λ§Œ λ‹€λ₯Ό 뿐 λͺ¨λ‘ 같은 값이닀.
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
console.log(binary === octal); // true
console.log(octal === hex); // true
  • μ •μˆ˜λ‘œ ν‘œμ‹œλœλ‹€ 해도 μ‹€μˆ˜λ‘œ 처리 λ©λ‹ˆλ‹€.
// 숫자 νƒ€μž…μ€ λͺ¨λ‘ μ‹€μˆ˜λ‘œ μ²˜λ¦¬λœλ‹€.
console.log(1 === 1.0); // true
console.log(4 / 2); // 2
console.log(3 / 2); // 1.5
  • μΆ”κ°€μ μœΌλ‘œ 세가지 νŠΉλ³„ν•œ 값도 ν‘œν˜„ κ°€λŠ₯함
    • Infinity : μ–‘μ˜ λ¬΄ν•œλŒ€
    • -Infinity : 음의 λ¬΄ν•œλŒ€
    • NaN : μ‚°μˆ  μ—°μ‚° λΆˆκ°€(not-a-number)

      μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λŒ€μˆ˜λ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ―€λ‘œ NaN을 NAN, nan λ“±κ³Ό 같이 ν‘œν˜„ν•˜λ©΄ μ—λŸ¬λ‚¨

λ¬Έμžμ—΄ νƒ€μž…

CλŠ” 문자의 λ°°μ—΄λ‘œ λ¬Έμžμ—΄μ„ ν‘œν˜„ν•˜κ³ , μžλ°”λŠ” 객체둜 λ¬Έμžμ—΄μ„ ν‘œν˜„ν•©λ‹ˆλ‹€.
jsμ—μ„œ λ¬Έμžμ—΄μ„ μ›μ‹œνƒ€μž…μ΄λ©° λ³€κ²½λΆˆκ°€λŠ₯ν•œ κ°’μž…λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄

  • es6λΆ€ν„° λ„μž…λœ μƒˆλ‘œμš΄ λ¬Έμžμ—΄ ν‘œκΈ°λ²•
  • λ”°μ˜΄ν‘œ λŒ€μ‹  λ°±ν‹±(``) μ‚¬μš©
  • μ€‘μš”ν•œ κΈ°λŠ₯μœΌλ‘œλŠ” 멀티라인 λ¬Έμžμ—΄, ν‘œν˜„μ‹ μ‚½μž…, νƒœκ·Έλ“œ ν…œν”Œλ¦Ώ 등이 μžˆλ‹€.
  • 멀티라인 λ¬Έμžμ—΄ : 일반 λ¬Έμžμ—΄κ³Ό 달리 μ€„λ°”κΏˆ ν—ˆμš©, 곡백 적용
  • ν‘œν˜„μ‹ μ‚½μž… : λ¬Έμžμ—΄ 내뢀에 ν‘œν˜„μ‹μ„ μ‚¬μš©
var first = "Ung-mo";
var last = "Lee";

// ES6: ν‘œν˜„μ‹ μ‚½μž…
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.

undefined vs null

  • undefined
    λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ 이후 값을 ν• λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄ undefined둜 μ΄ˆκΈ°ν™” 됨
    κ°œλ°œμžκ°€ ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹ˆλΌ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•  λ•Œ μ‚¬μš©

  • null
    λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” κ±Έ λͺ…μ‹œν•˜κΈ° μœ„ν•΄ μ‚¬μš©
    이전에 ν• λ‹Ήλ˜μ–΄ 있던 값에 λŒ€ν•œ μ°Έμ‘°λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 제거
    ν•¨μˆ˜κ°€ μš”νš¨ν•œ 값을 λ°˜ν™˜ν•  수 μ—†λŠ” 경우 null을 λ°˜ν™˜ ν•˜κΈ°λ„ν•œλ‹€.

Symbol νƒ€μž…

  • λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ›μ‹œ νƒ€μž…μ˜ κ°’
  • λ‹€λ₯Έ κ°’κ³Ό μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” 유일 λ¬΄μ΄ν•œ κ°’
  • 주둜 이름이 μΆ©λŒν•  μœ„ν—˜μ΄ μ—†λŠ” 객체의 μœ μΌν•œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©.
// μ‹¬λ²Œ κ°’ 생성
var key = Symbol("key");
console.log(typeof key); // symbol

// 객체 생성
var obj = {};

// 이름이 μΆ©λŒν•  μœ„ν—˜μ΄ μ—†λŠ” μœ μΌλ¬΄μ΄ν•œ 값인 μ‹¬λ²Œμ„ ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•œλ‹€.
obj[key] = "value";
console.log(obj[key]); // value

데이터 νƒ€μž…μ΄ ν•„μš”ν•œ 이유

  • 값을 μ €μž₯ν•  λ•Œ 확보해야 ν•˜λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 크기 λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄
  • 값을 μ°Έμ‘°ν•  λ•Œ ν•œ λ²ˆμ— 읽어 λ“€μ—¬μ•Ό ν•  λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 크기λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄
  • λ©”λͺ¨λ¦¬μ—μ„œ 읽어 듀인 2μ§„μˆ˜λ₯Ό μ–΄λ–»κ²Œ 해석할지 κ²°μ •ν•˜κΈ° μœ„ν•΄

동적 타이핑

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž… μ–Έμ–΄ μž…λ‹ˆλ‹€.

정적 νƒ€μž… μ–Έμ–΄

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ 데이터 νƒ€μž…μ„ μ„ μ–Έ ν•΄μ•Όν•©λ‹ˆλ‹€. 이λ₯Ό λͺ…μ‹œμ  νƒ€μž…μ„ μ–Έ 이라고 ν•©λ‹ˆλ‹€.
  • λ³€μˆ˜μ˜ νƒ€μž…μ„ λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • 컴파일 μ‹œμ μ— νƒ€μž… 체크λ₯Ό μˆ˜ν–‰ ν•©λ‹ˆλ‹€.
  • νƒ€μž… μ²΄ν¬μ—μ„œ μ—λŸ¬ λ°œμƒμ‹œ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 자체λ₯Ό λ§‰μŠ΅λ‹ˆλ‹€.
  • c, c++, java, kotlin, go, rust 등이 정적 νƒ€μž… μ–Έμ–΄ μž…λ‹ˆλ‹€.

동적 νƒ€μž… μ–Έμ–΄

  • 값을 ν• λ‹Ή ν•˜λŠ” μ‹œμ μ— λ³€μˆ˜μ˜ νƒ€μž…μ΄ λ™μ μœΌλ‘œ κ²°μ •λ©λ‹ˆλ‹€. 이λ₯Ό νƒ€μž… μΆ”λ‘  이라고 ν•©λ‹ˆλ‹€.
  • λ³€μˆ˜μ˜ νƒ€μž…μ„ μ–Έμ œλ“ μ§€ 자유둭게 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 개발자의 μ˜λ„μ™€λŠ” 상관없이 μ•”λ¬΅μ μœΌλ‘œ νƒ€μž…μ΄ λ³€ν™˜λ˜κΈ°λ„ 함
  • μœ μ—°μ„±μ€ λ†’μœΌλ‚˜ 신뒰성은 떨어짐
  • javascript, python, ruby 등이 동적 νƒ€μž… μ–Έμ–΄ μž…λ‹ˆλ‹€.

λŒ“κΈ€