๐ Optional Chaning
?. ์์ ํ๊ฐ ๋์์ด undefined๋ null์ด๋ฉด ํ๊ฐ๋ฅผ ๋ฉ์ถ๊ณ undefined๋ฅผ ๋ฐํํ๋ค.
๐ ์ธ์ ์ฌ์ฉํ๋?
1. ์์ ์๋ ์์ ์๋ ์๋ ๊ฐ์ฒด์ ์์ฑ์ ์กฐํํ ๋
๋ง์ด ์ด์ํ๊ฒ ๋ค๋ฆฌ๊ฒ ์ง๋ง ์ต์ ๋ ์ฒด์ด๋์ ์ด๋ฐ ๊ฒฝ์ฐ์ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์๊ฐ ์์ ๋๋ ๊ฐ์ฒด์ ์์ฑ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด์ "&&" ์ฐ์ฐ์๋ฅผ ์ผ๋ค.
let user = {};
user ๊ฐ์ฒด ์์์ user.address.street ์ ์กฐํํ์ฌ์ผ ํ๋๋ฐ ์ฃผ์ ์ ๋ณด๊ฐ ์๋ user๊ฐ ์๋ค๊ณ ํ ๋
๊ทธ๋ฅ ์กฐํํ๋ค๋ฉด ๋ฐ๋ก ํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์
console.log(user && user.address && user.address.street);
์ด๋ฐ ์์ผ๋ก ํ์ธํ๋ฉด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ผ๋ค.
์ต์ ๋ ์ฒด์ด๋์ด ๋ง๋ค์ด์ง๊ณ ๋์๋
console.log(user?.address?.street);
์ด๋ ๊ฒ ์ ๊ทผํ ์ ์๊ฒ๋์๋ค. ์ต์ ๋ ์ฒด์ด๋์ผ๋ก ์ ๊ทผํ๋ฉด ํ์ ์๋ฌ๊ฐ ๋์ง ์๊ณ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ undefined๋ฅผ ๋ฐํํ๋ค.
1-2.
๋์ ๊ฒฝ์ฐ api ๊ฐ์ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉํ๋ค. (ํํ ๋ฆฌ์ผ ๋ณด๋์ค..)
<img
src={channelIcon?.url} // ? ์ด ๋ฌผ์ํ ๋ญ์ง
alt='channel img'
/>
channelIcon์ด api์์ ๋ถ๋ฌ์จ ๊ฐ์ด๊ณ ๊ฐ์ด ์์ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค.
(ํํ ๋ฆฌ์ผ์์ ์ ๋ฌผ์ํ๋ฅผ ๋ดค์ ๋ ์คํ์ธ์คใ ใ )
2. ์กด์ฌํ์ง ์์ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ (ํจ์์ ํธ์ถ)
let result = someInterface.customMethod?.();
๋ง์ฝ ์์ฑ์ ํด๋น ์ด๋ฆ์ด ์์ง๋ง ํจ์๊ฐ ์๋๋ผ๋ฉด ?. ์ ์ฌ์ฉ์ ์ฌ์ ํ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค.
์ต์ ๋ ์ฒด์ด๋์ ?. ์ด์ ๋ถ๋ถ๋ง ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ ๊ฒฝ์ฐ someInterface ์์ฒด๋ null์ด๋ undefined๊ฐ ์๋์ด์ผ ํ๋ค. ๋ง์ฝ null ๋๋ undefined ๊ฐ์ด ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด
someInterface?.customMethod?.();
์ด๋ ๊ฒ ์ฌ์ฉํด์ผํ๋ค.
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://ko.javascript.info/optional-chaining
์ต์ ๋ ์ฒด์ด๋ '?.'
ko.javascript.info
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining
Optional chaining - JavaScript | MDN
optional chaining ์ฐ์ฐ์ (?.) ๋ ์ฒด์ธ์ ๊ฐ ์ฐธ์กฐ๊ฐ ์ ํจํ์ง ๋ช ์์ ์ผ๋ก ๊ฒ์ฆํ์ง ์๊ณ , ์ฐ๊ฒฐ๋ ๊ฐ์ฒด ์ฒด์ธ ๋ด์ ๊น์์ด ์์นํ ์์ฑ ๊ฐ์ ์ฝ์ ์ ์๋ค.
developer.mozilla.org
'Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] Class (0) | 2022.06.10 |
---|---|
[JS] promise, async, await ์ฐ์ง ์๊ณ parallel, waterfall ๊ตฌํํ๊ธฐ (0) | 2022.06.03 |
[JS] Promise, Await ๋น๋๊ธฐ์ ๋ํด ์์๋ณด๊ธฐ (0) | 2022.06.01 |
[JS] JavaScript์ ํ์ ๊ฒ์ฌ (0) | 2022.05.29 |
[JS] ์์๋ณ์๋ฅผ ์ค์ฌ์ผ ํ๋ ์ด์ (ํด๋ฆฐ ์ฝ๋) (0) | 2022.05.27 |