
๐ JavaScript์ Null ๋ณํฉ ์ฐ์ฐ์์ typeof ์ฐ์ฐ์, ์ผํญ ์ฐ์ฐ์
์๋ฐ์คํฌ๋ฆฝํธ์๋ ๊ธฐ๋ณธ์ ์ธ ์ฐ์ ๋ฐ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ธ์๋ ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ ์ฉํ ์ฐ์ฐ์๋ค์ด ์๋ค.
ํนํ null ๋ณํฉ ์ฐ์ฐ์(??), typeof ์ฐ์ฐ์, ์ผํญ ์ฐ์ฐ์(?:)๋ ์กฐ๊ฑด ์ฒ๋ฆฌ, ์๋ฃํ ํ์ธ, ๊ธฐ๋ณธ๊ฐ ์ง์ ๊ฐ์ ์ํฉ์์ ๋งค์ฐ ๋ง์ด ํ์ฉ๋๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ์ด๋ฒ ํฌ์คํ ์์๋ ์ด ์ธ ์ฐ์ฐ์์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ์ ์์ ์ ํจ๊ป ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๐ช Null ๋ณํฉ ์ฐ์ฐ์ (Nullish Coalescing Operator)
??๋ null ๋๋ undefined๊ฐ ์๋ ๊ฐ์ ์ ํํ๋ ์ฐ์ฐ์์ด๋ค.
์ฆ, ๊ฐ์ด ์์ ๋(null ๋๋ undefined์ผ ๋)๋ง ๋์ฒด๊ฐ์ ์ฌ์ฉํ๋ค.
let var1;
let var2 = 10;
let var3 = 20;
let var4 = var1 ?? var2;
console.log(var4); // 10 (var2์ ๊ฐ์ ๊ฐ์ ธ์ด)
let var5 = var1 ?? var3;
console.log(var5); // 20 (var3์ ๊ฐ์ ๊ฐ์ ธ์ด)
let var6 = var2 ?? var3;
console.log(var6); // 10 (์์ ๊ฐ์ด ์ ํจํ๋ฏ๋ก ์์ ์๋ var2์ ๊ฐ์ ๊ฐ์ ธ์ด)
์ด์ฒ๋ผ ??๋ ์กด์ฌํ๋ ๊ฐ์ ์ถ๋ ค๋ด๋ ๋ฐ์ ํนํ๋ ์ฐ์ฐ์์ด๋ค.
์๋ฅผ ๋ค๋ฉด, ์ฌ์ฉ์์ ๋๋ค์์ด ๋น์ด์์ ๋ ๊ธฐ๋ณธ ๊ฐ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ผ๋ฉด ์๋์ ๊ฐ์ด ??๋ฅผ ํ์ฉํ ์ ์๋ค.
let nickName = "ssosso";
let basicName = "guest";
let displayName = nickName ?? basicName;
console.log(displayName); // "ssosso" (nickName์ ๊ฐ์ด ์์ผ๋ ์ด๊ฑธ ๊ฐ์ ธ์ด)
let nickName = "";
let basicName = "guest";
let displayName = nickName ?? basicName;
console.log(displayName); // "guest" (nickName์ ๊ฐ์ด ์์ผ๋ basicName์ ๊ฐ์ ธ์ด)
๐ ์ฐธ๊ณ
||(OR ์ฐ์ฐ์)์ ํผ๋ํ๊ธฐ ์ฌ์ด๋ฐ,
||๋ 0, "" (๋น ๋ฌธ์์ด), false ๊ฐ์ falsyํ ๊ฐ๋ ๋์ฒดํด๋ฒ๋ฆฌ์ง๋ง,
??๋ ์ค์ง null๊ณผ undefined ๋ง ์ฒดํฌํ๋ค.
console.log("" || "๋์ฒด๊ฐ"); // "๋์ฒด๊ฐ" (""๋ falsyํ ๊ฐ์ด๋๊น "๋์ฒด๊ฐ"์ ์ ํํจ)
console.log("" ?? "๋์ฒด๊ฐ"); // "" (null์ด๋ undefined๊ฐ ์๋๋๊น ""๋ฅผ ์ ํํจ)
๐จ typeof ์ฐ์ฐ์
์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ ๋์ ํ์ดํ(Dynamic Typing) ํน์ฑ์ ๊ฐ์ง๊ณ ์์ด์
์๋์ ๊ฐ์ด ํ๋์ ๋ณ์์ ์ฌ๋ฌ ์๋ฃํ์ ์์ฐจ์ ์ผ๋ก ๋ด์ ์ ์๋ค.
let var7 = 1; // number
var7 = "hello"; // string
์ด์ฒ๋ผ ๋ณ์์ ํ์ ์ด ์ธ์ ๋ ์ง ๋ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ๊ฐ์ ์๋ฃํ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๊ณ ,
์ด๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ typeof ์ฐ์ฐ์์ด๋ค.
var7 = "hello";
let t1 = typeof var7;
console.log(t1); // string
๐ ์ฐธ๊ณ
typeof๋ ๋ฐํ๋๋ ๊ฐ์ด ๋ฌธ์์ด ํํ๋ผ๋ ํน์ง์ด ์๋ค.
console.log(typeof 123); // "number"
console.log(typeof "abc"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
์ด๋ ์ฃผ์ํ ์ ์ด typeof null์ "object"๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ์ค๋๋ ์ค๊ณ ๋ฒ๊ทธ๋ผ๊ณ ํ๋๋ฐ ,, ํธํ์ฑ ๋๋ฌธ์ ์ง๊ธ๊น์ง๋ ์ ์ง๋๊ณ ์๋ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด([ ])๊ณผ ๊ฐ์ฒด({ })๋ ๋ชจ๋ "object"๋ผ๊ณ ๋์ค๊ธฐ ๋๋ฌธ์
์ด ๋์ ๊ตฌ๋ถํ๋ ค๋ฉด Array.isArray()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
console.log(typeof null); // "object"
console.log(Array.isArray([])); // true
์ด์ฒ๋ผ typeof๋ ๊ธฐ๋ณธ์ ์ธ ํ์ ํ์ธ์๋ ์ ์ฉํ์ง๋ง
์ ๊ตํ ํ์
ํ๋ณ์ด ํ์ํ ๋๋ ์ถ๊ฐ์ ์ธ ํจ์(Array.isArray, instanceof ๋ฑ)๋ฅผ ํจ๊ป ํ์ฉํด์ผ ํ๋ค.
๐ฅ ์ผํญ ์ฐ์ฐ์ (Ternary Operator)
์ผํญ ์ฐ์ฐ์๋ `์กฐ๊ฑด์ ? ์ฐธ์ผ ๋ ๊ฐ : ๊ฑฐ์ง์ผ ๋ ๊ฐ`์ ํํ๋ก
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ๋ ์ฌ์ฉํ๋ค.
let var8 = 10;
// ์๊ตฌ์ฌํญ: var8์ด ์ง์๋ฉด "์ง์", ์๋๋ฉด "ํ์"
let res = var8 % 2 === 0 ? "์ง์" : "ํ์";
console.log(res); // "์ง์"
์ด๊ฑธ ํ์ฉํ๋ฉด ๊ฐ๋จํ ์กฐ๊ฑด๋ฌธ์ ํ ์ค๋ก ์ฒ๋ฆฌํ ์ ์์ด์
์กฐ๊ฑด๋ถ ๋ ๋๋ง์ด๋ UI ํ์ ๋ก์ง์์ ์์ฃผ ํ์ฉ๋๋ค๊ณ ํ๋ค.
let isLoggedIn = true;
let message = isLoggedIn ? "ํ์ํฉ๋๋ค!" : "๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค.";
console.log(message); // "ํ์ํฉ๋๋ค!"
๐์ฐธ๊ณ
๋ค๋ง ์กฐ๊ฑด์ด ๋ณต์กํด์ง๋ฉด if๋ฌธ์ด ๋ ๊ฐ๋ ์ฑ์ด ์ข๊ธฐ ๋๋ฌธ์
์ผํญ ์ฐ์ฐ์๋ ์งง๊ณ ๋จ์ํ ์กฐ๊ฑด ์ฒ๋ฆฌ์๋ง ์ฐ๋ ๊ฒ์ด ๋ฐ๋์งํ ๊ฒ ๊ฐ๋ค.
// ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ ์์
let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "F";
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else {
grade = "F";
}
๐ ๊ฒฐ๋ก
C๋ Java ๊ฐ์ ์ ์ ํ์ ์ธ์ด๋ฅผ ๋ค๋ค์์ ๋๋ ํ์ ์ด ๊ณ ์ ์ ์ด๋ผ ์ด๋ฐ ๊ณ ๋ฏผ์ ํ ์ผ์ด ๋ณ๋ก ์์๋๋ฐ,
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ดํ ์ธ์ด๋ผ์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ๊ณผ ์๋ฃํ์ด ๊ณ์ ๋ณํ ์ ์๋ค๋ ์ ์ด ์์ง์ ์ด์ํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ typeof ๊ฐ์ ์ฐ์ฐ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํด์ ๋๋ฒ๊น ๊ณผ ์์ ์ฑ ํ๋ณด๋ฅผ ํด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
๋ํ ?? ์ฐ์ฐ์์ ?: ์ฐ์ฐ์๋ ์ฝ๋๋ฅผ ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋์์
์งง๊ณ ์ง๊ด์ ์ธ ํํ์์ ์ ํธํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ ๊ฐ๋ค.
๋ค๋ง, ๋๋ฌด ๋จ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ ํด์น ์๋ ์์ผ๋ ์ ํ๋จํด์ ์จ์ผ๊ฒ ๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ ๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋] JavaScript ํจ์์ ํธ์ด์คํ (1) | 2025.09.19 |
|---|---|
| [๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋] JavaScript์ ์กฐ๊ฑด๋ฌธ, if์ switch (0) | 2025.09.19 |
| [๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋] JavaScript ์ฐ์ฐ์ (0) | 2025.09.19 |
| [๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋] JavaScript ํ๋ณํ (0) | 2025.09.16 |
| [๋ฆฌ์กํธ ๊ธฐ์ด ์คํฐ๋] JavaScript ์๋ฃํ ์ ๋ฆฌ (0) | 2025.09.16 |