[JS] Optional Chaining

wnsxk2Β·2024λ…„ 12μ›” 17일

πŸ’‘ κ°œμš”

ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ„ ν•˜λ‹€κ°€ Optional Chaining의 κ°œλ…μ„ ν™•μ‹€νžˆ κΈ°μ–΅ν•˜κΈ° μœ„ν•΄ κΈ°λ‘ν•œλ‹€. 이 κΈ€μ—μ„œλŠ” Optional Chaining의 κ°œλ…κ³Ό μ˜ˆμ‹œ, 그리고 μ‚¬μš©λ²•μ„ λͺ…ν™•νžˆ μ„€λͺ…ν•œλ‹€.

πŸ” Optional Chainingμ΄λž€?

μ˜΅μ…”λ„ 체이닝(Optional Chaining)은 "μ‘΄μž¬ν•  μˆ˜λ„ 있고, 없을 μˆ˜λ„ μžˆλŠ” 값에 μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•˜λŠ” 방법"이닀.
이 방법을 톡해 μ˜ˆμƒμΉ˜ λͺ»ν•œ undefinedλ‚˜ null에 μ ‘κ·Όν•˜λŠ” μƒν™©μ—μ„œλ„ μ—λŸ¬ 없이 μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰ν•  수 μžˆλ‹€.

πŸ”Ž μ˜ˆμ‹œ

μ•„λž˜ μ˜ˆμ‹œμ™€ ν•¨κ»˜ Optional Chaining의 λ™μž‘ 방식을 μ•Œμ•„λ³΄μž.

const user = {   
	name: '철수',   
	profile: {     
		age: 25,     
		hobby: '좕ꡬ'   
	} 
};

user κ°μ²΄λŠ” profile 속성을 κ°€μ§€κ³  μžˆμ§€λ§Œ, detail 속성은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

console.log(user.detail.age); // 🀯 μ—λŸ¬ λ°œμƒ!

μœ„ μ½”λ“œμ—μ„œ user.detail.ageλ₯Ό μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄, user.detail이 undefined이기 λ•Œλ¬Έμ— undefined.age에 μ ‘κ·Όν•˜λ €κ³  ν•œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” undefined에 속성을 μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄ "Cannot read property 'age' of undefined"λΌλŠ” μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

이 문제λ₯Ό Optional Chaining을 μ‚¬μš©ν•΄ ν•΄κ²°ν•  수 μžˆλ‹€.

console.log(user?.detail?.age); // βœ… μ—λŸ¬ X, undefined λ°˜ν™˜

πŸ“˜ Optional Chaining λ™μž‘ 원리

Optional Chaining을 μ μš©ν•œ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

  1. user?. β†’ userκ°€ μ‘΄μž¬ν•˜λ©΄ λ‹€μŒμœΌλ‘œ μ§„ν–‰. userκ°€ nullμ΄λ‚˜ undefined이면 λ°”λ‘œ undefined λ°˜ν™˜.
  2. user?.detail?. β†’ detail이 μ‘΄μž¬ν•  λ•Œλ§Œ λ‹€μŒμœΌλ‘œ μ§„ν–‰. detail이 nullμ΄λ‚˜ undefinedλ©΄ λ°”λ‘œ undefined λ°˜ν™˜.
  3. user?.detail?.age β†’ age에 μ ‘κ·Ό. λ§Œμ•½ userλ‚˜ detail이 μ—†μœΌλ©΄ undefinedλ₯Ό λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μ—λŸ¬ 없이 μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.

πŸͺ„ κ²°λ‘ 

Optional Chaining은 μ‘΄μž¬ν•  μˆ˜λ„ 있고, 없을 μˆ˜λ„ μžˆλŠ” 값에 μ•ˆμ „ν•˜κ²Œ μ ‘κ·Όν•˜λŠ” 방법이닀.
λ§Œμ•½ μ ‘κ·Όν•˜λ €λŠ” 속성이 μ—†μœΌλ©΄ μ—λŸ¬ λŒ€μ‹  undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.
Optional Chaining을 μ‚¬μš©ν•˜λ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ μ—λŸ¬ 없이 μ½”λ“œλ₯Ό 더 μ•ˆμ •μ μœΌλ‘œ μž‘μ„±ν•  수 μžˆλ‹€.

πŸ’‘ Tip:
Optional Chaining은 객체의 속성뿐 μ•„λ‹ˆλΌ, ν•¨μˆ˜ ν˜ΈμΆœμ—λ„ μ‚¬μš©ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ user?.getName?.()κ³Ό 같이 ν•¨μˆ˜ ν˜ΈμΆœμ„ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•  μˆ˜λ„ μžˆλ‹€.

ν˜Ήμ‹œ λͺ¨λ₯Ό μ—λŸ¬λ₯Ό λŒ€λΉ„ν•˜μ—¬ undefined의 속성을 찾을 κ°€λŠ₯성이 μžˆλŠ” μœ„μΉ˜μ—μ„œλŠ” Optional Chaining을 적극적으둜 ν™œμš©ν•˜μž.


πŸ“Œ Reference

0개의 λŒ“κΈ€