🧠 μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜•(Data Type)

μ–Έμ§€Β·2025λ…„ 4μ›” 14일

πŸ“Œ μžλ£Œν˜•μ΄λž€?

  • λ°μ΄ν„°μ˜ μ’…λ₯˜
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 총 7개의 κΈ°λ³Έ νƒ€μž…(6개의 μ›μ‹œνƒ€μž… + 1개의 객체 νƒ€μž…)을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

πŸ”Ή μ›μ‹œ νƒ€μž… (Primitive Type)

νƒ€μž…μ„€λͺ…
booleantrue / false (쑰건문, 논리 νŒλ‹¨ κΈ°μ€€)
null"μ—†μŒ"을 μ˜λ―Έν•˜λŠ” κ°’ (κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •)
undefined값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ λ³€μˆ˜μ˜ κΈ°λ³Έ κ°’
numberμ •μˆ˜, μ‹€μˆ˜ λ“± μˆ«μžν˜•
stringν…μŠ€νŠΈ 데이터
symbolκ³ μœ ν•œ μ‹λ³„μžλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš© (ES6)
BigInt맀우 큰 μ •μˆ˜λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ” νƒ€μž… (123n ν˜•μ‹)

πŸ”Έ 객체 νƒ€μž… (Object Type)

  • 두 개 μ΄μƒμ˜ λ³΅μž‘ν•œ 개체λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©
  • {} μ€‘κ΄„ν˜Έλ‘œ μƒμ„±ν•˜λ©°, key-value 쌍으둜 ꡬ성
  • λ‹€μˆ˜μ˜ μ›μ‹œμžλ£Œν˜•μ„ ν¬ν•¨ν•˜κ±°λ‚˜ λ³΅μž‘ν•œ 개체(Entity)λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ” μžλ£Œν˜•
  • 접근은 objecy.keyν˜•νƒœλ‘œ ν‘œν˜„
  • λ³€μˆ˜λ₯Ό μ£Όμ†Œκ°’μ— λ„£μ–΄μ„œ μ €μž₯
let user = {
  name : "John",
  age : 27
}

βœ… 객체 μ ‘κ·Ό

console.log(user.name); -> OUTPUT : John
-> userλΌλŠ” μœ„μΉ˜μ—μ„œ nameμ΄λΌλŠ” λ²ˆμ§€λ₯Ό μ°ΎλŠ”λ‹€

βœ… 객체 μΆ”κ°€

user.weight = 72;

βœ… 객체 μ‚­μ œ

delete user.weight;

⚠️ 객체 볡사 μ‹œ 문제점

  • κ°μ²΄λŠ” μ£Όμ†Œκ°’μ„ μ°Έμ‘°ν•˜λ―€λ‘œ, 볡사 ν›„ 값을 λ³€κ²½ν•˜λ©΄ 원본도 ν•¨κ»˜ 변경됨

πŸ‘πŸ» 볡사 문제점 ν•΄κ²° λ°©μ•ˆ

βœ… 얕은 볡사(Shallow Copy)

  • λ‚΄λΆ€ κ°μ²΄λŠ” 참쑰만 λ³΅μ‚¬λ˜λ―€λ‘œ ν•œ λ‹¨κ³„κΉŒμ§€λ§Œ 볡사
    - for λ¬Έ
    - Object.assign(볡사할 κ³³, 볡사할 κ°’)
    - spread μ—°μ‚°μž
    - ❗ 쀑첩 객체가 μžˆμ„ 경우 λ‚΄λΆ€κΉŒμ§€ λ³΅μ‚¬λ˜μ§€ μ•ŠμŒ

βœ… κΉŠμ€ 볡사 (Deep Copy)

  • λ‚΄λΆ€ κ°μ²΄κΉŒμ§€ μ™„μ „νžˆ 볡사
  • μž¬κ·€ ν•¨μˆ˜
  • JSON.parse(JSON.stringify(obj)) (단점: ν•¨μˆ˜/심볼 λˆ„λ½) ➑️ μ„œλ²„μ™€ 데이터λ₯Ό μ£Όκ³ λ°›μ„λ•Œ 주둜 μ‚¬μš©

πŸ“ μžλ£Œν˜• 확인 방법

typeof 123; // "number"
typeof null; // "object" ❗ (μžλ°”μŠ€ν¬λ¦½νŠΈ 섀계상 버그)
typeof undefined; // "undefined"
typeof {} // "object"
typeof [] // "object"
typeof (() => {}) // "function"

❗ typeof null은 β€œobjectβ€λ‘œ λ‚˜μ˜€λŠ” 역사적 λ²„κ·Έμž…λ‹ˆλ‹€.
λ°°μ—΄κ³Ό κ°μ²΄λŠ” λͺ¨λ‘ "object"둜 λ‚˜μ˜€λ―€λ‘œ 주의!


πŸ”„ ν˜• λ³€ν™˜ (Type Conversion)

  • λŠμŠ¨ν•œ νƒ€μž… μ–Έμ–΄ ν˜Ήμ€ 동적 νƒ€μž… μ–Έμ–΄λ‘œ λ³€μˆ˜μ˜ μžλ£Œν˜•μ€ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•  ν•„μš”κ°€ μ—†λŠ” μ–Έμ–΄

βœ”οΈ 암묡적 ν˜• λ³€ν™˜ (μžλ™)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž… μ–Έμ–΄μ΄λ―€λ‘œ 상황에 따라 μžλ™μœΌλ‘œ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰

"5" * 2    // 10 (string β†’ number)
true + 1   // 2  (boolean β†’ number)

βœ”οΈ λͺ…μ‹œμ  ν˜• λ³€ν™˜ (κ°•μ œ)

πŸ”‘ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ : String()

String(123); // "123"
123 + "";     // "123" (암묡적)

으둜 ν˜•λ³€ν™˜

πŸ”’ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ : Number()

  • parseInt() -> μ •μˆ˜ λ³€ν™˜
  • parseFloat -> μ‹€μˆ˜ λ³€ν™˜
Number("123");      // 123
parseInt("123.45"); // 123
parseFloat("123.45"); // 123.45
+"123";              // 123 (단항 μ—°μ‚°μž)

❗️ Boolean으둜 λ³€ν™˜ : Boolean()

  • False κ°€ λ‚˜μ˜€λŠ” κ°’ : 빈 λ¬Έμžμ—΄ , NaN, Null, undefined
Boolean("hello"); // true
Boolean("");      // false

0개의 λŒ“κΈ€