์ฐ๋ฆฌ๊ฐ ๋น๋๊ธฐ ๋ฐฉ์
์ผ๋ก ํต์ ์ ํ๊ณ ์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต์ ๋ฐ์์ค๋ ๋์ ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ฐ์ดํฐ๊ฐ undefined์ด๋ฏ๋ก ์ฒซ ํ๋ฉด์ด ๊ทธ๋ ค์ง๋ ์๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ฉด์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ๋ฉด์ ๋ฏธ๋ฆฌ ๊ทธ๋ ค๋์ ์ ์๋ ๋ถ๋ถ์ ๊ทธ๋ ค๋๊ณ ๋ก๋ฉ ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๋ง์ ๊ทธ๋ ค์ฃผ๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ฌ์ฉํ๋ค.
์กฐ๊ฑด๋ถ ๋ ๋๋ง์๋ && ์ฐ์ฐ์, ์ผํญ์ฐ์ฐ์, optional-chaining์ด ์๋ค.
data ? data.fetchProfile : undefined
data๊ฐ ์๋ค๋ฉด data.fetchProfile ๊ฐ์, ์๋ค๋ฉด undefined๋ฅผ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ผํญ์ฐ์ฐ์
๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋์ ์์ ๋๋ฅผ ๋ชจ๋ ์ ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ๋ํ๋ด๊ธฐ ์ํด์ && ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด๋ณด์๋ค.
data ? data.fetchProfile
์๋ฏธ๋ ์์์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ ๋์ ๋์ผํ๋ค. && ์ฐ์ฐ์
๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ์๋์ผ๋ก undefined๋ฅผ ๋ฐํํ๊ณ , data๊ฐ ์ฐธ์ด๋ฉด data.fetchProfile๋ฅผ ์คํํ๋ค.
data || data.fetchProfile
&& ์ฐ์ฐ์์ ๋ฐ๋๋๋ ๊ฐ๋
์ด๋ค. ์์ ๊ฐ์ด ๊ฑฐ์ง(false)์ผ ๋ ๋ค์ ๊ฐ์ ๋ณด์ฌ์ค๋ค. ์ฆ data๊ฐ ๊ฑฐ์ง์ด๋ฉด data.fetchProfile์ ๋ณด์ฌ์ค๋ค. ๋ง์ฝ data๊ฐ ์ฐธ์ด๋ฉด data๋ฅผ ๋ณด์ฌ์ค๋ค. || ์ฐ์ฐ์
๋ ๊ธฐ๋ณธ๊ฐ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ค.
data ?? data.fetchProfile
data๊ฐ null
์ด๋ undefined
์ผ๋ data.fetchProfile ๋ณด์ฌ์ค๋ค. data๊ฐ 0์ด๊ฑฐ๋ false ๋ฑ์ ๊ฑฐ์ง๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ฉ๋์ง ์๋๋ค! ๊ธฐ๋ณธ์ ์ธ ์๋ฏธ๋ || ์ฐ์ฐ์์ ์ ์ฌํ๋ nullish-coalescing์ null์ด๋ undefined๋ง ํด๋นํ๋ค๋ ๊ฒ์ ์ ์ํ์!
Optional-Chaining์ && ์ฐ์ฐ์๋ฅผ ์ฐ๋ฉด์ ๊ธธ์ด์ก๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์๋ค.
data?.fetchProfile
? ์ฐ์ฐ์ ์ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ undefined๋ null ์ด๋ผ๋ฉด undefined๋ฅผ ๋ฆฌํดํ๋ค. ์ผํญ์ฐ์ฐ์, && ์ฐ์ฐ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
optional chaining
์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ undefined๋ฅผ ์ถ๋ ฅํ๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ๋ฉด์ ๋์์ค๋ค(๋ฆฌ๋ ๋๋ง
).