ν”Όλ“œλ‘œ λŒμ•„κ°€κΈ°
🚫 Stop Writing Old JavaScript β€” βœ… Start Using Modern Built-in APIs (Part 2)
Dev.toDev.to
Frontend

Immutable API λ„μž…μ„ ν†΅ν•œ μƒνƒœ 무결성 확보 및 λŸ°νƒ€μž„ μ—λŸ¬ 제거

🚫 Stop Writing Old JavaScript β€” βœ… Start Using Modern Built-in APIs (Part 2)

Nagendra Namburi2026λ…„ 4μ›” 11일11λΆ„intermediate

Context

κΈ°μ‘΄ JavaScript API의 Mutation 기반 λ™μž‘μœΌλ‘œ μΈν•œ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈμ™€ μƒνƒœ κ΄€λ¦¬μ˜ λ³΅μž‘μ„± μ¦λŒ€. 특히 null-prototype κ°μ²΄μ—μ„œμ˜ λ©”μ„œλ“œ 호좜 μ‹€νŒ¨ 및 λΆˆν•„μš”ν•œ λ°°μ—΄ 볡제 κ³Όμ •μœΌλ‘œ μΈν•œ λ©”λͺ¨λ¦¬ λ‚­λΉ„κ°€ 병λͺ© μ§€μ μœΌλ‘œ μž‘μš©.

Technical Solution

  • Object.hasOwn() λ„μž…μ„ ν†΅ν•œ prototype chain μ˜€λ²„λΌμ΄λ”© λ°©μ§€ 및 null-prototype 객체에 λŒ€ν•œ μ•ˆμ „ν•œ 속성 검증 ꡬ쑰 섀계
  • .toSorted(), .toReversed() λ“± Immutable Array Method μ±„νƒμœΌλ‘œ 원본 데이터 보쑴 및 React μƒνƒœ μ—…λ°μ΄νŠΈ 둜직 μ΅œμ ν™”
  • .with() λ©”μ„œλ“œλ₯Ό ν†΅ν•œ νŠΉμ • 인덱슀 μš”μ†Œ ꡐ체 μ‹œ Spread operator와 map μ—°μ‚°μœΌλ‘œ μΈν•œ λΆˆν•„μš”ν•œ O(n) 순회 제거
  • .findLast() 기반의 μ—­λ°©ν–₯ 탐색 κ΅¬ν˜„μœΌλ‘œ λ°°μ—΄ 전체 볡제 및 reverse μ—°μ‚° 없이 μ΅œμ‹  데이터 μΆ”μΆœ νš¨μœ¨ν™”
  • crypto.randomUUID() λ‚΄μž₯ API ν™œμš©μ„ ν†΅ν•œ μ™ΈλΆ€ 라이브러리 μ˜μ‘΄μ„± 제거 및 Cryptographically secureν•œ ID 생성 체계 ꡬ좕

- null-prototype 객체 κ°€λŠ₯성이 μžˆλŠ” API 응닡 검증 μ‹œ Object.hasOwn() 적용 μ—¬λΆ€ 확인 - React μƒνƒœ μ—…λ°μ΄νŠΈ μ‹œ Spread operator 기반의 λ°°μ—΄ 볡제 λŒ€μ‹  .with() λ˜λŠ” .toSorted() μ‚¬μš© κ²€ν†  - uuid λ“± λ‹¨μˆœ μœ ν‹Έλ¦¬ν‹° μ™ΈλΆ€ νŒ¨ν‚€μ§€λ₯Ό crypto.randomUUID() λ‚΄μž₯ API둜 λŒ€μ²΄ν•˜μ—¬ Bundle Size μ΅œμ ν™” - μ΅œμ‹  데이터 μΆ”μΆœ μ‹œ [..arr].reverse().find() νŒ¨ν„΄μ„ .findLast()둜 μ „ν™˜ν•˜μ—¬ λ©”λͺ¨λ¦¬ ν• λ‹Ή μ΅œμ†Œν™”

원문 읽기