# Optional Chaning(?.
)
์ต์
๋ ์ฒด์ด๋์ ES2020์ ์ถ๊ฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์
๋๋ค. ํ์
์คํฌ๋ฆฝํธ 3.7
๋ฒ์ ์์ ๊ตฌํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์
จ๋ ๋ถ๋ค์๊ฒ ์ต์ํ ๋ฌธ๋ฒ์ผ ๊ฒ ์
๋๋ค. ์ต์
๋ ์ฒด์ด๋ ๋ฌธ๋ฒ์ผ๋ก ๊ฐ์ฒด์ ์์ฑ ๊ฐ์ด ์ ํจํ์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. ์ต์
๋ ์ฒด์ด๋(?.
) ์์ ํ๊ฐ ๋์์ด undefined
๋ null
์ด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ undefined
๋ฅผ ๋ฐํํฉ๋๋ค.
# ์ต์ ๋ ์ฒด์ด๋์ด ์ถ๊ฐ๋๊ธฐ ์
์ต์ ๋ ์ฒด์ด๋ ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋๊ธฐ ์ ์ ์ค์ฒฉ๋ ๊ฐ์ฒด์ ํ์ ์์ฑ์ ์ฐพ๊ธฐ ์ํ ์ฝ๋๋ ์๋์ ๊ฐ์์ต๋๋ค.
const userInfo = {
name: {
first: 'Hong',
last: 'Gildong',
},
address: {
city: 'Seoul',
postcode: '04377',
},
};
const postcode = userInfo.address && userInfo.address.postcode;
&&
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ userInfo
์ address
์์ฑ์ด ์๋์ง ํ์ธ์ ํ๊ณ postcode
์ ์ ๊ทผํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
# ์ต์ ๋ ์ฒด์ด๋์ด ์ถ๊ฐ ๋ ํ
const userInfo = {
name: {
first: 'Hong',
last: 'Gildong',
},
address: {
city: 'Seoul',
postcode: '04377',
},
};
const postcode = userInfo.address?.postcode;
์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํ๋ฉด ์ด์ ์ฝ๋๋ณด๋ค ๋ฌธ๋ฒ์ ์ผ๋ก ๊น๋ํ๊ณ ์์ ํ๊ฒ ์ค์ฒฉ๋ ๊ฐ์ฒด์ ํ์ ์์ฑ ๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
const userInfo = {
name: {
first: 'Hong',
last: 'Gildong',
},
address: {
city: 'Seoul',
postcode: '04377',
},
getInfo: () => userInfo,
};
userInfo.getInfo?.();
// userInfo object
userInfo.setInfo?.();
// undefined
์ต์ ๋ ์ฒด์ด๋์ ๋ฉ์๋์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ํธ์ถํ ๋๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
const userInfo = {
name: {
first: 'Hong',
last: 'Gildong',
},
address: {
city: 'Seoul',
postcode: '04377',
},
};
const key = 'city';
console.log(userInfo.address?.[key]);
// Seoul
.
๋์ ๋๊ดํธ []
๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์๋ ์ต์
๋ ์ฒด์ด๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
# ๋ ๋ณํฉ ์ฐ์ฐ์(??
)์ ๊ฐ์ด ํ์ฉํ๊ธฐ
์ต์
๋ ์ฒด์ด๋๊ณผ ๋ ๋ณํฉ ์ฐ์ฐ์(??
)๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ฑ์ ๊ฐ์ ์ ๋ฌด๋ฅผ ํ๋ณํ๊ณ ๊ธฐ๋ณธ ๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค.
const userInfo = {
name: {
first: 'Hong',
last: 'Gildong',
},
address: {
city: 'Seoul',
postcode: '04377',
},
};
const city = userInfo.address?.city ?? 'New York';
์ ์ฝ๋์์ city
์ ๊ฐ์ ๋ ๋ณํฉ ์ฐ์ฐ์(??
)์ ์ผ์ชฝ ํญ์ธ ์ต์
๋ ์ฒด์ด๋์ผ๋ก ๊ฒ์ฆํ ๊ฐ์ฒด์ ์์ฑ ๊ฐ์ด null
๋๋ undefined
์ด๋ฉด ๋ ๋ณํฉ ์ฐ์ฐ์(??
)์ ์ค๋ฅธ์ชฝ ํญ์ธ New York
์ด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
TIP
๋ ๋ณํฉ ์ฐ์ฐ์(??
)์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ ๋ณํฉ ์ฐ์ฐ์(??
) ํฌ์คํ
์ ์ฐธ๊ณ ํ์ธ์.
WARNING
์ต์ ๋ ์ฒด์ด๋์ ๋จ์ฉํ์ง ์๋๋ก ์ฃผ์ํด์ฃผ์ธ์.
์ต์
๋ ์ฒด์ด๋(?.
)์ ์กด์ฌํ์ง ์์๋ ๊ด์ฐฎ์ ๋์์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ ์์ ์ฝ๋์์ userInfo
๋ ๋ฐ๋์ ์กด์ฌํด์ผ ํ์ง๋ง address
๋ ํ์๊ฐ์ด ์๋๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก userInfo.address?.city
์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋์งํ์ง๋ง userInfo?.address?.city
๋ ๋ฐ๋์งํ์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด userInfo
์ ๊ฐ์ด ์ฌ๋ฐ๋ฅด์ง ์์ ๋ ์ฆ์ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ๋ชปํด ์ถํ ๋๋ฒ๊น
์ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค.
โ Default parameter Instance ๐ โ