개발/β›΅ ν•­ν•΄99

[ν•­ν•΄99] Day25. μ˜΅μ…”λ„ 체이닝(Optional Chaining)μ΄λž€?

밍(Ming) 🐈‍⬛ 2022. 2. 19. 01:42
728x90
λ°˜μ‘ν˜•

πŸ‘©πŸ»‍πŸ’» Today I Learned πŸ“š

 

 

✨ μ˜΅μ…”널 μ²΄μ΄λ‹μ΄λž€?

κ·Έλƒ₯ 슀윽- 보고 μ§€λ‚˜κ°ˆ λ•ŒλŠ” μ‚Όν•­μ—°μ‚°μžμ— μ“΄λŠκ±°λ₯Ό λ‹€λ₯΄κ²Œ λ§ν•˜λŠ”κ±΄κ°€? 라며 κ°€λ³κ²Œ μƒκ°ν•˜κ³  μ°Ύμ•„λ΄€λŠ”λ° 그런게 μ•„λ‹ˆμ˜€λ‹€. ………
Optional Chaining은 ES2020μ—μ„œ λ“±μž₯ν•œ μƒˆλ‘œμš΄ μ—°μ‚°μžλ‘œμ„œ ‘?.’ μ˜ ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λ©° 체인으둜 이루어진 각 μ°Έμ‘°κ°€ μœ νš¨ν•œμ§€ λͺ…μ‹œμ μœΌλ‘œ κ²€μ¦ν•˜μ§€ μ•Šκ³  μ—°κ²°λœ 객체 체인 내에 κΉŠμˆ™νžˆ μœ„μΉ˜ν•œ 속성 값을 읽을 수 μžˆλŠ” μ—°μ‚°μžμ΄λ‹€. 체이닝 μ—°μ‚°μž(.)와 λΉ„μŠ·ν•˜κ²Œ λ™μž‘ν•˜μ§€λ§Œ μ°Έμ‘°κ°€ null ν˜Ήμ€ undefined여도 μ—λŸ¬μ‹μ„ λ¦¬ν„΄ν•˜μ§€ μ•Šκ³  undefined 값을 λ¦¬ν„΄ν•œλ‹€. ν•¨μˆ˜λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

μ€‘μ²©λœ 였브젝트 ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ” 데에 κ°€μž₯ μ•ˆμ „ν•œ λ°©λ²•μœΌλ‘œ, 쀑간 ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λ„ μ•ˆμ „ν•˜κ²Œ 접근이 κ°€λŠ₯ν•˜λ‹€.

 

✨ μ™œ μ‚¬μš©ν•˜λŠ”κ°€?

Optional Chaining을 μ‚¬μš©ν•˜λ―€λ‘œ λ¬Έλ²•μ˜ 가독성이 μ˜¬λΌκ°€κ³  ν•œκ²° κ°„κ²°ν•œ ν‘œν˜„μ‹μ„ μ“Έ 수 μžˆλ‹€. 속성값이 μ‘΄μž¬ν•œλ‹€λŠ” ν™•μ‹€ν•œ 보증이 없을 경우 κ·Έ 객체λ₯Ό νƒμƒ‰ν•˜λŠ”λ° 도움을 μ€€λ‹€.

const animals = { 
cat: { 
    name: "λ‚˜λΉ„" 
}, 
lion: { 
    name: "ν˜Έλž‘μ΄" 
} } 

const dogName = animals.dog?.name; 


console.log(dogName); 


output //undefined 

μ˜΅μ…”λ„ 체이닝을 μ“°μ§€ μ•Šμ€ μƒν™©μ—μ„œλŠ” 값을 μ°ΎμœΌλ €κ³ ν•˜λ©΄ μ—λŸ¬μ‹μ΄ λœ¬λ‹€

 

optional chaining μ—°μ‚°μžλŠ” μ°Έμ‘°λ‚˜ κΈ°λŠ₯이 undefined λ˜λŠ” null일 수 μžˆμ„ λ•Œ μ—°κ²°λœ 객체의 값에 μ ‘κ·Όν•˜λŠ” λ‹¨μˆœν™”ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•œλ‹€.

예λ₯Ό λ“€μ–΄, μ€‘μ²©λœ ꡬ쑰λ₯Ό κ°€μ§„ κ°μ²΄μ—μ„œ objκ°€ μžˆλ‹€. optional chaining이 없이 κΉŠμ΄ μ€‘μ²©λœ ν•˜μœ„ 속성을 찾으렀면, λ‹€μŒκ³Ό 같이 μ°Έμ‘°λ₯Ό 확인해야 ν•œλ‹€:

let nestedProp = obj.first && obj.first.second;

πŸ‘‡πŸ»

let nestedProp = obj.first?.second;


μ›Ήκ°œλ°œμ—μ„œλŠ”, μ›Ή APIλ₯Ό ν†΅ν•˜μ—¬ 얻은 였브젝트λ₯Ό λ‹€λ£° 일이 λ§Žλ‹€. 그런데, 잘λͺ»λœ μ…€λ ‰ν„° 등을 μ‚¬μš©ν•˜κ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 였브젝트λ₯Ό μ°Έμ‘°ν•˜λŠ” κ²½μš°μ—λŠ” null을 리턴할 수 μžˆλ‹€. 이 κ²½μš°μ— μ—˜λ¦¬λ¨ΌνŠΈκ°€ μ—†λ‹€λ©΄ errorκ°€ λ°œμƒν•˜λŠ”λ°, μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ©ˆμΆ”κΈ° λ•Œλ¬Έμ—, μ—¬κΈ°μ„œ 결과둜 κ·Έλƒ₯ html = null을 λ°›κ³ μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? 이럴 λ•Œ μ˜΅μ…”λ„ 체이닝이 ν•„μš”ν•˜λ‹€.


μ˜΅μ…”λ„ 체이닝 πŸ‘‰πŸ» https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining

 

Optional chaining - JavaScript | MDN

optional chaining μ—°μ‚°μž (?.) λŠ” 체인의 각 μ°Έμ‘°κ°€ μœ νš¨ν•œμ§€ λͺ…μ‹œμ μœΌλ‘œ κ²€μ¦ν•˜μ§€ μ•Šκ³ , μ—°κ²°λœ 객체 체인 내에 κΉŠμˆ™μ΄ μœ„μΉ˜ν•œ 속성 값을 읽을 수 μžˆλ‹€.

developer.mozilla.org

 

 

 

πŸ’œ 회고

μ–΄μ œ 점심을 λ¨Ήκ³  μ²΄ν•˜λŠ” λ°”λžŒμ— TIL도 μ“°μ§€ λͺ»ν•˜κ³  κΈ°μ ˆν•˜λ“―μ΄ 잠이 λ“€μ—ˆμ—ˆλ˜ μ–΄μ œ πŸ˜“ κ·Έλž˜λ„ κ°œμΈκ³Όμ œλŠ” μ–΄λŠμ •λ„ λ‹€ 끝내고 μ“°λŸ¬μ§„κ±°λΌμ„œ κ·Έλ‚˜λ§ˆ λ‹€ν–‰μ΄μ˜€λ‹€ πŸ’¦ 개인 κ³Όμ œμ—μ„œ μš”κ΅¬ν–ˆλ˜ 사항은 λ¦¬λ•μŠ€λ‘œ λͺ©λ‘κ΄€λ¦¬ / νŒŒμ΄μ–΄λ² μ΄μŠ€ λ°μ΄ν„°κ΄€λ¦¬μ˜€λŠ”λ°, 여기에닀가 μˆ˜μ •κ³Ό μ‚­μ œ κΈ°λŠ₯을 λ”ν–ˆκ³ , 데이터에 μžλ£Œκ°€ 없을 λ•Œ λ³΄μ—¬μ£ΌλŠ” empty μ»΄ν¬λ„ŒνŠΈλ„ λ§Œλ“€μ—ˆμ—ˆλŠ”λ°, λ‘œλ”©μ΄ 될 λ•Œλ§ˆλ‹€ μžλ£Œκ°€ μžˆμ„ λ•Œμ—λ„ μž μ‹œ λ³΄μ˜€λ‹€κ°€ μ‚¬λΌμ§€λŠ” 것이닀 … κ·Έλž˜μ„œ μŠ€ν”Όλ„ˆλ„ λ§Œλ“€μ—ˆλ”λ‹ˆ 잘 κ°€λ €μ‘Œλ‹€.쑰금 더 μžμ—°μŠ€λŸ¬μš΄ 포퍼먼슀λ₯Ό κ΅¬ν˜„ν–ˆλ‹€!!

728x90