**์์ ์ ๋ณด๊ณ ๋ฐฐ์ด ๊ณณ **
์ต์ ๋ ์ฒด์ด๋ '?.' (javascript.info)
1. Optional Chaining ์ด ์๊ธด ์ด์
(1) ์๊ธด ์ด์
๊ฐ์ฒด ์์ ๋ฉค๋ฒ์ ๊ฐ์ ์ป๊ธฐ ์ํด ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๋๋ฐ, ๊ทธ ๋ฉค๋ฒ๊ฐ ์กด์ฌํ์ง ์๋ ์๊ฐ์ด ์๋ค.
์ด ๊ฒฝ์ฐ ์๋๋ผ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
const User {}
console.log(user.adderess);
// syntax error
์ด์ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด ์์ ํน์ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ ค๊ณ ํ์ง๋ง, ๊ทธ ๋ฉค๋ฒ๊ฐ ์๋์ง ์๋์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ์ Error๋ฅผ ํผํ๊ธฐ ์ํด OptionalChaing์ด ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
(2) Optional Chaining ์์์ ๋ ์ด๋ป๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์?
&& ์ด ๋งจ ์ฒ์ ๋ง๋๋ falsey ๊ฐ์ ๋ฐํํ๋ค๋ ํน์ฑ์ ์ด์ฉํ์ฌ ํด๋น ๋ฉค๋ฒ๊ฐ ์๋ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
{} ์ ๊ฐ์ ๋น ๊ฐ์ฒด๋ true๋ผ๋ ๊ฒ์ ๋ณต๊ธฐํ์.
const User = {}
console.log(User&&User.address&&User.address.street)
// ๋๋ฒ์งธ์ธ User.address๊ฐ ์๋ ๊ฐ์ด๋ฏ๋ก undefined๊ฐ ์ถ๋ ฅ๋จ.
์ด๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ค๋ ๋จ์ ์ด ์๋ค.
2. Optional Chaining ์ฐ๋ ๋ฒ
(1) ๋ฉค๋ฒ ์ด๋ฆ ์์์ ์ ํ๊ธฐ๋ฒ ๋ฐ๋ก ์ ๊ทผ ์
?. ์ ๋ฐ๋ก ์ผ์ชฝ์ด ํ๊ฐ ๋์์ด๋ค. ?. ์ผ์ชฝ์ด ์กด์ฌํ๋ฉด, street ๊น์ง ๊ฐ์ ํ๊ฐ.
?. ์ผ์ชฝ์ด ์กด์ฌํ์ง ์์ผ๋ฉด undefined ์ถ๋ ฅ
const User = {}
console.log(User.address?.street); // undefined ์ถ๋ ฅ
(2) ๊ฐ์ฒด ์์ ๋งค์๋์ ์ ๊ทผ
userA = {
sayHi(){
console.log("์๋
ํ์ธ์.")
}
}
userB = {}
userA.sayHi?.(); // ๋งจ ๋ง์ง๋ง ()๋ ์ธ์๋ฅผ ๋ปํ๋ ๋ฏ --> ์๋
ํ์ธ์ ์ถ๋ ฅ
userB.sayHi?.(); // userB์๋ sayHi๋ ํจ์๊ฐ ์์ผ๋ฏ๋ก ์ถ๋ ฅ x ์ด๊ฑด undefined ์
(4) Optional Chaining ์ธ ์ ์๋ ์๊ฑด
a. .?์ ์ฐ๋ ๋ณ์ ์์ฒด๋ ์ ์ธ์ด ๋์ด ์์ด์ผ ํ๋ค.
// User๋ฅผ ๋ฐ๋ก ์ ์ธํ์ง ์์.
console.log(User.address?.street); // Error
b. .? ์ผ์ชฝ ๋์ ์ด์ ์ ์ผ์ชฝ์ ๋ฌด์กฐ๊ฑด ์กด์ฌํด์ผ ํ๋ค. ๊ทธ๊ฒ์ด ์์ผ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
UserA = {
name: "์๋ฏผ",
age: 25,
address: {
vilige: "๋ฌ์ฒ๋",
},
};
UserB = {
name: "๋ฏผ์",
age: 20,
};
console.log(UserA.address.vilige); // ok
console.log(UserB.address?.vilige.street); // ok -> address๊ฐ ์๋์ง ํ์ธํ ๊ฒ์ด๋ฏ๋ก
console.log(UserB.address.vilige?.street); // Error -> address๊ฐ ์์ด์
(5) Optional Chaining์ด ํ๊ฐํ๋ ๋ฒ์
?. ์ผ์ชฝ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ๊ฑฐ๊ธฐ์ ํ๊ฐ๋ฅผ ๋ฉ์ถ๊ณ undefined๋ฅผ ์ถ๋ ฅ. (์ค๋ฅธ์ชฝ์ ํ๊ฐํ์ง ์๋๋ค.)
User = {};
let x = 0;
console.log(User.address?.sayHi(x++));
console.log(x);
?. ์ผ์ชฝ์ด ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๋ค์ x ++ ์ ์คํ ์์ฒด๊ฐ ์๋๋ค.
3. Optional Chaining์ ์ด์ฉํ ์์ธ์ฒ๋ฆฌ
|| ๊ฐ ๋งจ ์ฒ์ ๋ง๋๋ ์ฐธ๊ฐ์ ๋ฐํํ๋ค๋ ๊ฒ์ ์ด์ฉ