Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ ์Šคํ„ฐ๋””

[๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ ์Šคํ„ฐ๋””] JavaScript์˜ Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž์™€ typeof ์—ฐ์‚ฐ์ž, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

๋ฐ˜์‘ํ˜•

 

 

 

 

 

 

๐Ÿ“‘ 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 ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์„œ ๋””๋ฒ„๊น…๊ณผ ์•ˆ์ •์„ฑ ํ™•๋ณด๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

 

๋˜ํ•œ ?? ์—ฐ์‚ฐ์ž์™€ ?: ์—ฐ์‚ฐ์ž๋Š” ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋™์‹œ์—

์งง๊ณ  ์ง๊ด€์ ์ธ ํ‘œํ˜„์‹์„ ์„ ํ˜ธํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ์„ ์ž˜ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‹ค๋งŒ, ๋„ˆ๋ฌด ๋‚จ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ž˜ ํŒ๋‹จํ•ด์„œ ์จ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•