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

2022. 2. 19. 01:42Β· 개발/β›΅ ν•­ν•΄99
λͺ©μ°¨
  1. πŸ‘©πŸ»β€πŸ’» Today I Learned πŸ“š
  2. ✨ μ˜΅μ…”널 μ²΄μ΄λ‹μ΄λž€?
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

'개발 > β›΅ ν•­ν•΄99' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν•­ν•΄99] Week04. WIL – 라이프 사이클(ν΄λž˜μŠ€ν˜• vs ν•¨μˆ˜ν˜•)  (0) 2022.02.19
[ν•­ν•΄99] Day27. TIL – TDZ? / 또 λ‹€λ₯Έ 였λ₯˜μ˜ 발견?  (0) 2022.02.19
[ν•­ν•΄99] Day23. TIL – μ–‘λ°©ν–₯ λ°”μΈλ”©μ΄λž€?  (0) 2022.02.19
[ν•­ν•΄99] Day22. TIL – Reduxλ₯Ό μ‚¬μš©ν•˜λŠ” 것과 Context API μ‚¬μš©μ˜ 차이점  (0) 2022.02.19
[ν•­ν•΄99] Day16. TIL – React(λ¦¬μ•‘νŠΈ) μ—μ„œ JSX λ°°μ—΄ 반볡문 / React – Router v6 λ³€ν™”  (0) 2022.02.19
  1. πŸ‘©πŸ»β€πŸ’» Today I Learned πŸ“š
  2. ✨ μ˜΅μ…”널 μ²΄μ΄λ‹μ΄λž€?
'개발/β›΅ ν•­ν•΄99' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν•­ν•΄99] Week04. WIL – 라이프 사이클(ν΄λž˜μŠ€ν˜• vs ν•¨μˆ˜ν˜•)
  • [ν•­ν•΄99] Day27. TIL – TDZ? / 또 λ‹€λ₯Έ 였λ₯˜μ˜ 발견?
  • [ν•­ν•΄99] Day23. TIL – μ–‘λ°©ν–₯ λ°”μΈλ”©μ΄λž€?
  • [ν•­ν•΄99] Day22. TIL – Reduxλ₯Ό μ‚¬μš©ν•˜λŠ” 것과 Context API μ‚¬μš©μ˜ 차이점
밍(Ming) πŸˆβ€β¬›
밍(Ming) πŸˆβ€β¬›
πŸ‘©πŸ»β€πŸ’» Frontend Developer
밍(Ming) πŸˆβ€β¬›
Ming devlog
밍(Ming) πŸˆβ€β¬›
전체
였늘
μ–΄μ œ

곡지사항

  • About Ming 🐰
  • λΆ„λ₯˜ 전체보기 (261)
    • 개발 (255)
      • πŸ“ TIL (58)
      • ❌ 였λ₯˜ λ…ΈνŠΈ (23)
      • React (23)
      • Next.js (11)
      • React-Native (6)
      • JavaScript (10)
      • Flutter (19)
      • Database (1)
      • πŸ’¬ μ½”λ”©ν…ŒμŠ€νŠΈ (21)
      • πŸ“š English (9)
      • Etc... (25)
      • β›΅ ν•­ν•΄99 (49)
    • πŸ’» Dev (6)
      • πŸ“ TIL (4)
      • πŸ’¬ Algorithm (1)
      • Etc... (1)

인기 κΈ€

νƒœκ·Έ

  • μžλ°”μŠ€ν¬λ¦½νŠΈ
  • github
  • 개발자일기
  • μ΄μ½”λ…Έλ―ΈμŠ€νŠΈ
  • μ˜μ–΄κ³΅λΆ€
  • λ¦¬μ•‘νŠΈ
  • flutter
  • μ½”λ”©ν…ŒμŠ€νŠΈ
  • Firebase
  • λΆ€νŠΈμΊ ν”„
  • ν”ŒλŸ¬ν„°
  • react
  • nextjs
  • leetcode
  • react-native
  • μ½”ν…Œκ³΅λΆ€
  • μ•Œκ³ λ¦¬μ¦˜
  • todaywhatidid
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈ
  • μ½”ν…Œ
  • ν•­ν•΄99
  • 코딩곡뢀
  • 개발자회고
  • twid
  • TIL
  • ReactNative
  • 슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½
  • λ¦¬μ•‘νŠΈλ„€μ΄ν‹°λΈŒ
  • Git

졜근 λŒ“κΈ€

졜근 κΈ€

250x250
hELLO Β· Designed By μ •μƒμš°.v4.2.1
밍(Ming) πŸˆβ€β¬›
[ν•­ν•΄99] Day25. μ˜΅μ…”λ„ 체이닝(Optional Chaining)μ΄λž€?
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • 포럼
  • 둜그인

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.