๋ฐ์ํ
โ ๏ธ ์ผ๋ฐ์ ์ธ ์กฐ๊ฑด๋ถ ๋ก์ง์ผ๋ก ์ฌ์ฉ๋๋ if๋ฌธ์ ๋ค๋ฅธ ์์ฑ ํจํด์ผ๋ก ๋์ฒดํ๋ ์ด์ ?
- if๋ฌธ ์กฐ๊ฑด์ด ํ ๋ฒ์ ๋๋ฌด ๋ง์ ์์๋ฅผ ๋น๊ตํ ๊ฒฝ์ฐ ์ค์ฒฉ(nested) ์กฐ๊ฑด์ด ๋ง์์ง๋ฏ๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
- ์กฐ๊ฑด์์์ ๋์ผํ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ ์์ค์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ๋นํจ์จ์ ์ด๋ค.
- ํน์ ๋ถ๋ถ์ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๋ชจ๋ ์กฐ๊ฑด์ ์ดํด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค.
- ์์ ๊ฐ์ ์ด์ ๋ก if, else ๋ฌธ๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ฌธ์ ๋จ๋ฐํ๋ฉด ๊ฐ๋
์ฑ์ ํด์น๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
์๋์ ์ด์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋์์ ์๊ฐํ๊ณ ์ ํ๋ค.
if (user) {
if (user.accessLevel) {
if (user.accessLevel === 'admin') {
console.log("๊ด๋ฆฌ์๋ ์๋
ํ์ธ์.");
} else if (user.accessLevel === 'vip') {
console.log("VIP ํ์๋ ์๋
ํ์ธ์.");
} else {
console.log("์ผ๋ฐํ์์ ์ด์ฉํ ์ ์์ต๋๋ค.");
}
} else {
console.log("ํ์๊ฐ์
๋๊ธฐ ์ค์
๋๋ค.");
}
} else {
console.log("๊ฐ์
ํ ์ด์ฉํ์ธ์.");
}
1๏ธโฃ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์
- ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด 'if' ์กฐ๊ฑด๋ฌธ ๋ณด๋ค ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ง๋ฉฐ ์ฝ๊ธฐ ์ฌ์์ง๋ค.
- ์ฌ๋ฌ ๋ฒ ์ค์ฒฉ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ๋ณต์กํ ๋ก์ง์์๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ฏ๋ก ๋จ์ํ๊ณ ๊ฐ๋จํ ์กฐ๊ฑด์ผ ๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ์กฐ๊ฑด๋ฌธ ? ์กฐ๊ฑด๋ฌธ์ด true์ผ๋ ์คํํ ์ฝ๋ : false์ผ ๋ ์คํํ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
let accessStatus = user && user.accessLevel
? (user.accessLevel === 'admin'
? "๊ด๋ฆฌ์๋ ์๋
ํ์ธ์."
: (user.accessLevel === 'vip'
? "VIP ํ์๋ ์๋
ํ์ธ์."
: "์ผ๋ฐํ์์ ์ด์ฉํ ์ ์์ต๋๋ค")
)
: "๊ฐ์
ํ ์ด์ฉํ์ธ์.";
2๏ธโฃ '&&', '||' ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ํตํ ๋จ๋ฝ ํ๋ก ํ๊ฐ
- ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๊ฐ๋ฅผ ์งํํ๋ && (๋ ผ๋ฆฌ๊ณฑ), || (๋ ผ๋ฆฌํฉ) ์ฐ์ฐ์๋ ํ๊ฐ ์ค๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ๊ฐ์ ๋ฐ๋ก return ํ๋ค.
- ์ด๋ฐ ์์๋ณ return ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด์ ๋ค์ ์์นํ ํผ์ฐ์ฐ์๋ ๋ณผ ํ์ ์์ด ์ฐ์ฐ์ ๋๋ด๋ฒ๋ฆฌ๋ ๋ฌธ๋ฒ์
short circuit evaluation, ๋จ๋ฝํ๋กํ๊ฐ(๋จ์ถํ๊ฐ)๋ผ๊ณ ํ๋ค. - &&(๋
ผ๋ฆฌ๊ณฑ) ์ฐ์ฐ์๋ ๋น๊ตํ๋ ๊ฐ์ด ๋ชจ๋ true์ฌ์ผ true๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ๊ฐ์ด false๋ผ๋ฉด ๋ค์ ํผ์ฐ์ฐ์๋ ๋ฌด์กฐ๊ฑด false.
(&&๋ก ์ฐ๊ฒฐ๋ ๊ฐ๋ค์ ์ฒ์ ๋ฑ์ฅํ๋ falsy ๊ฐ์ ์ฐพ์์ฃผ๊ณ ๊ทธ๊ฒ ์๋๋ฉด ๋ง์ง๋ง๊ฐ์ ๋จ๊ฒจ์ค๋ค๊ณ ์ธ์ฐ๋ฉด ํธํ๋ค!) - ||(๋ ผ๋ฆฌํฉ) ์ฐ์ฐ์๋ ๋น๊ตํ๋ ๊ฐ ์ค ํ๋๋ง true์ฌ๋ ๋ฌด์กฐ๊ฑด true์ด๋ฏ๋ก ํด๋นํ๋ ๊ฐ์ ๋ฐ๋ก returnํ๋ค.
- if, else ๋ฌธ๊ณผ &&, || ์ฐ์ฐ์๋ฅผ ํ์ฉํ ๋จ๋ฝํ๋กํ๊ฐ์์ ์ฝ๋ ๋น๊ต. ์คํ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
1. &&(๋
ผ๋ฆฌ๊ณฑ) ์ฐ์ฐ์์ ๋จ๋ฝ ํ๋ก ํ๊ฐ
true && false // false (์ผ์ชฝ์ด true๋ฉด, ์ค๋ฅธ์ชฝ๊น์ง ํ์ํ๊ณ false๋ฅผ ๋ฐํ)
true && true. // true. (์ผ์ชฝ์ด true๋ฉด, ์ค๋ฅธ์ชฝ๊น์ง ํ์ํ๊ณ true๋ฅผ ๋ฐํ)
false && true; // false (์ค๋ฅธ์ชฝ์ ๋ณผ๊ฒ๋ ์์ด, ์ผ์ชฝ์ false๋ฅผ ๋ฐํ)
false && false; // false (์ค๋ฅธ์ชฝ์ ๋ณผ๊ฒ๋ ์์ด, ์ผ์ชฝ์ false๋ฅผ ๋ฐํ)
2. ||(๋
ผ๋ฆฌํฉ) ์ฐ์ฐ์์ ๋จ๋ฝ ํ๋ก ํ๊ฐ
true || false; // true(์ค๋ฅธ์ชฝ์ false๋ ๋ณผ ๊ฒ๋ ์์ด, ์ผ์ชฝ์ true ๋ฐํ)
true || true; // true(์ค๋ฅธ์ชฝ์ true๋ ๋ณผ ๊ฒ๋ ์์ด, ์ผ์ชฝ์ true ๋ฐํ)
false || true; // true(์ผ์ชฝ์ false๋ฅผ ํ์ํ๊ณ , ์ค๋ฅธ์ชฝ์ true ๋ฐํ )
false || false; // false(์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ๊น์ง false์์ ํ์ํ๊ณ ๋ง์ง๋ง์ผ๋ก ํ์ํ ์ค๋ฅธ์ชฝ false ๋ฐํ)
// ํ์์ด๋ฉด์ ํ์๋ฑ๊ธ์ ์ถฉ์กฑํ๋ค๋ฉด ์๋ด ๋ฌธ๊ตฌ ํ์
if (user && user.accessLevel) {
console.log("์ด๋ ๊ฐ๋ฅํฉ๋๋ค.");
} else {
console.log("์ผ๋ฐ ํ์์ ์ด์ฉํ ์ ์์ต๋๋ค.");
}
// ํ์๋ฑ๊ธ์ด ์๋ค๋ฉด ํ์ ๋ฑ๊ธํ์, ์๋๋ผ๋ฉด ์๋ด ๋ฌธ๊ตฌ ํ์
let accessLevel = user.accessLevel || "๊ฐ์
ํ ์ด์ฉํ์ธ์.";
console.log(accessLevel);
3๏ธโฃ ๊ฐ์ฒด ๋ฆฌํฐ๋ด
- ๊ฐ์ฒด์ key ๊ฐ์ ์กฐ๊ฑด์ ๋ฃ๊ณ value ๊ฐ์ ์กฐ๊ฑด์ด ์ดํ๋ ๋ ๋ณด์ฌ์ค ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๊ฐ๋ ์ฑ์ ๋์ธ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์กฐ๊ฑด๊ฐ์ ์งํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ผํญ์ฐ์ฐ์๋, ๋จ๋ฝํ๋ก ํ๊ฐ๋ฅผ ํตํด ์กฐ๊ฑด์์ ์คํํ๋ค.
const accessLevels = {
admin: "๊ด๋ฆฌ์๋ ์๋
ํ์ธ์.",
vip: "VIPํ์๋ ์๋
ํ์ธ์.",
notDefined: "๊ฐ์
ํ ์ด์ฉํ์ธ์."
};
let accessStatus = user?.accessLevel
? (accessLevels[user.accessLevel]
? accessLevels[user.accessLevel]
: "์ผ๋ฐํ์์ ์ด์ฉํ ์ ์์ต๋๋ค.")
: accessLevels.notDefined;
console.log(accessStatus);
๐๐ปโ๏ธ ์์ฝ!
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ if ์กฐ๊ฑด๋ฌธ์ ๋์ฒดํด์ ๋ ๋ช ํํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋์์ด ์กด์ฌํ๋ค.
- ๋ณต์กํ ๋ ผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๊น๊ฒ ์ค์ฒฉ๋ if๋ฌธ์ด ํ์ํ ์ ์์ง๋ง ์ผํญ ์ฐ์ฐ์๋ ๊ฐ๋จํ ์กฐ๊ฑด์์ ์คํํ ๋ ์ ํฉํ๋ค.
- ๋ ผ๋ฆฌ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๋จ๋ฝํ๋ก ํ๊ฐ๋ฅผ ํตํด ์ฝ๋ ํ ์ค๋ก ์ฌ๋ฌ ์กฐ๊ฑด์ ํ์ธํ ์ ์๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ด์ฉํ๋ฉด ์กฐ๊ฑด ์งํฉ์ ๋ง๋ค์ด์ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ ์ ์ง๋ณด์์ ์ ํฉํ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ฐ์ํ