๐Ÿ” JavaScript ์‹ฌํ™”

๊น€์ˆ˜์ง„ยท2025๋…„ 7์›” 3์ผ

ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ ์„น์…˜ 3 - JavaScript ์‹ฌํ™”

Truthy & Falsy

์ฐธ์ด๋‚˜ ๊ฑฐ์ง“์„ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š” ๊ฐ’๋„, ์กฐ๊ฑด๋ฌธ ๋‚ด์—์„œ ์ฐธ์ด๋‚˜ ๊ฑฐ์ง“์œผ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ํŠน์ง•

1. Falsyํ•œ ๊ฐ’

let f1 = undefined;
let f2 = null;
let f3 = 0;
let f4 = -0;
let f5 = NaN;
let f6 = "";
let f7 = 0n; //ํฐ ์ˆซ์ž๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ’

2. Truthyํ•œ ๊ฐ’

Falsyํ•œ ๊ฐ’์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’

๋‹จ๋ฝ ํ‰๊ฐ€

์ฒซ๋ฒˆ์จฐ ํ”ผ์—ฐ์‚ฐ์ž์—์„œ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋‹ค์Œ์˜ ํ”ผ์—ฐ์‚ฐ์ž์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

console.log (returnTrue() && returnFalse());

returnTrue์—์„œ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” returnFalse๊นŒ์ง€ ์ ‘๊ทผํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‹จ๋ฝ ํ‰๊ฐ€ ํ™œ์šฉ ์‚ฌ๋ก€

function printName(person) {
  const name = person && person.name;
  console.log(name || "person์˜ ๊ฐ’์ด ์—†์Œ");
}

printName(); //person์˜ ๊ฐ’์ด ์—†์Œ
printName({ name: "์ด์ •ํ™˜" }); //์ด์ •ํ™˜

printName() ์—์„œ๋Š” person์€ undefined ๊ฐ’์ด ํ• ๋‹น ๋˜์—ˆ๊ธฐ์— ๋”ฐ๋ผ์„œ name๋„ undefined๊ฐ’์ด๋‹ค. console.log์—์„œ๋Š” name ๊ฐ’์ด undefined์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ๊ฐ’์— ์ ‘๊ทผํ•˜์—ฌ, "person์˜ ๊ฐ’์ด ์—†์Œ" ์ด ์ถœ๋ ฅ๋œ๋‹ค.

printName({ name: "๊ฐœ๊ตดํžˆ" }) ์—์„œ๋Š” name์˜ ๊ฐ’์ด ๊ฐœ๊ตดํžˆ์ด๊ธฐ ๋–„๋ฌธ์— console.log์—์„œ๋Š” name๋งŒ ๊ณ ๋ คํ•˜์—ฌ ๊ฒŒ๊ตดํžˆ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ํ• ๋‹น๋œ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋ถ„ํ•ดํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ฐ’์ด๋‹ค.

1. ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

let arr = [1, 2, 3];

let [one, two, three, four = 4] = arr;

2. ๊ฐ์ฒด์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

let person = {
  name: "๊น€์ˆ˜์ง„",
  age: 22,
  hobby: "์•ผ๊ตฌ",
};

let { name, age, hobby} = person;
console.log {name, age, hobby};

3. ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•ด์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น โŒ

const func = (person)=>{
	person.name;
    person.age;
    .
    .
    .
}

func(person)

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์ผ์ผ์ด person.๊ฐ์ฒด์— ์ ‘๊ทผํ–ˆ์–ด์•ผํ–ˆ๋‹ค.

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น โญ•

const func = ({ name, age, hobby, extra }) => {
  console.log(name, age, hobby, extra);
};

func(person);

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ์ด์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

Spread ์—ฐ์‚ฐ์ž์™€ Rest ๋งค๊ฐœ๋ณ€์ˆ˜

1. Spread ์—ฐ์‚ฐ์ž

๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์„ ๊ฐœ๋ณ„๋กœ ํฉ๋ฟŒ๋ ค์ฃผ๋Š” ์—ญํ• 

Spread ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ โŒ

let arr1 = [1,2,3];
let arr2 = [4,arr1[0], arr1[1], arr1[2]]
console.log(arr2);  // 4,1,2,3

๋ฐฐ์—ด์ด ๋ฐ”๋€Œ๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

Spread ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ โญ•

let arr1 = [1,2,3];
let arr2 = [4,...arr1];
console.log(arr2);  // 4,1,2,3

spread ์—ฐ์‚ฐ์ž ...๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

2. Rest ๋งค๊ฐœ๋ณ€์ˆ˜

...rest ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์ธ์ˆ˜๋“ค์ด ๋‹ค ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.

function funcB(...rest) {
	console.log(rest);
}

funcB(...arr1); // [1,2,3]

function funcB(...rest) ์—์„œ ์ถ”๊ฐ€์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด function funcB(one, two, ...rest) ๋กœ ์ž‘์„ฑํ•˜๋˜, ...rest ๊ฐ€ ๊ฐ€์žฅ ๋’ค์— ์™€์•ผํ•œ๋‹ค.

์›์‹œํƒ€์ž… vs ๊ฐ์ฒดํƒ€์ž…

1. ์›์‹œํƒ€์ž…

Numver, String, Boolean ๋“ฑ ๊ฐ’ ์ž์ฒด๋กœ์จ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ณ  ๋ณต์‚ฌ๋œ๋‹ค.
๊ฐ€๋ฅดํ‚ค๋Š” ๊ฐ’์ด ๋‹ฌ๋ฆฌ์ง€๋Š” ๊ฒƒ
๋ถˆ๋ณ€๊ฐ’์ด๋‹ค.

2. ๊ฐ์ฒดํƒ€์ž…

Object, Array, Function ๋“ฑ ์ฐธ์กฐ๊ฐ’์„ ํ†ตํ•ด ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ณ  ๋ณต์‚ฌ๋œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๊ฐ’์ด ์•„์˜ˆ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ
๊ฐ€๋ณ€๊ฐ’์ด๋‹ค.

์ฃผ์˜์‚ฌํ•ญ
1. ์˜๋„์น˜ ์•Š๊ฒŒ ๊ฐ’์ด ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋‹ค.
์–•์€ ๋ณต์‚ฌ : ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค. ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ์–ด์„œ ์œ„ํ—˜ํ•˜๋‹ค.
๊นŠ์€ ๋ณต์‚ฌ : ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ํ”„๋กœํผํ‹ฐ๋งŒ ๋”ฐ๋กœ ๋ณต์‚ฌํ•œ๋‹ค. ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋  ์ผ์ด ์—†์–ด์„œ ์•ˆ์ „ํ•˜๋‹ค.

2. ๊ฐ์ฒด๊ฐ„์˜ ๋น„๊ต๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ™๋‹ค๊ณ  ๊ฐ™์€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ™์€ ๊ฐ’์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์ฐธ์กฐํ•œ๋‹ค๋ฉด ๊ฐ™์ง€ ์•Š์€ ๊ฐ’์ด๋‹ค. ์ฐธ์กฐ๊ฐ’์ด ์•„๋‹Œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” jsonStringify ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ฐธ์กฐ๊ฐ’์ด ์•„๋‹Œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

3. ๋ฐฐ์—ด๊ณผ ํ•จ์ˆ˜๋„ ์‚ฌ์‹ค ๊ฐ์ฒด์ด๋‹ค.
๋ฐฐ์—ด&ํ•จ์ˆ˜ ๋ชจ๋‘ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ์ˆœํšŒํ•˜๊ธฐ

์ˆœํšŒ๋ž€?
๋ฐฐ์—ด, ๊ฐ์ฒด์— ์ €์žฅ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์— ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ

1. ๋ฐฐ์—ด ์ˆœํšŒ

for of ๋ฐ˜๋ณต๋ฌธ

let arr = [1,2,3];

for(let item of arr) {
	console.log(item);
}

2. ๊ฐ์ฒด ์ˆœํšŒ

2.1 Object.keys ์‚ฌ์šฉ -> ๊ฐ์ฒด์—์„œ key ๊ฐ’๋“ค๋งŒ ๋ฝ‘์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

let person = {
  name: "๊น€์ˆ˜์ง„",
  age: 22,
  hobby: "์•ผ๊ตฌ",
};

let keys = Object.keys(person);
console.log(keys); // name, age, hobby

2.2 Object.values -> ๊ฐ์ฒด์—์„œ value ๊ฐ’๋“ค๋งŒ ๋ฝ‘์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

let values = Object.values(person);
console.log(value); // ๊น€์ˆ˜์ง„, 22, ์•ผ๊ตฌ

2.3 for in

for(let key in person) {
	const value = person[key];
	console.log(key, value);  // name ๊น€์ˆ˜์ง„ , age 22, hobby ์•ผ๊ตฌ
    
}

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ 1. ์š”์†Œ ์กฐ์ž‘

6๊ฐ€์ง€์˜ ์š”์†Œ ์กฐ์ž‘ ๋ฉ”์„œ๋“œ

1.1 push

๋ฐฐ์—ด์˜ ๋งจ ๋’ค์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ

๋ฐฐ์—ด์ด๋ฆ„.push(์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์š”์†Œ๋“ค);

1.2 pop

๋ฐฐ์—ฌ๋ฆ ๋งจ ๋’ค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜

๋ฐฐ์—ด์ด๋ฆ„.pop();

1.3 shift

๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜

๋ฐฐ์—ด์ด๋ฆ„.shift();

1.4 unshift

๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ

๋ฐฐ์—ด์ด๋ฆ„.unshift(์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์š”์†Œ๋“ค);

push ์™€ pop ์— ๋น„ํ•ด shift ์™€ unshift ๊ฐ€ ๋А๋ฆฌ๋‹ค.

1.5 slice

๊ฐ€์œ„์ฒ˜๋Ÿผ, ๋ฐฐ์—ด์˜ ํŠน์ • ๋ฒ”์œ„๋ฅผ ์ž˜๋ผ๋‚ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

๋ฐฐ์—ด์ด๋ฆ„.slice(์ž๋ฅด๊ณ  ์‹ถ์€ ์ฒซ๋ฒˆ์งธ ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค, ์ž๋ฅด๊ณ  ์‹ถ์€ ๋งˆ์ง€๋ง‰ ๋ฒ”์œ„์˜ ์ธ๋ฑ์Šค + 1);

๋ฐฐ์—ด์ด๋ฆ„.slice(์ฒจ๋ถ€ํ„ฐ ๋ช‡๊ฐœ๊นŒ์ง€ ์ž๋ฅด๊ณ  ์‹ถ๋‹ค์˜ ์ธ๋ฑ์Šค);

๋ฐฐ์—ด์ด๋ฆ„.slice(- ๋งˆ์ง€๋ง‰ ๋ช‡๊ฐœ๊นŒ์ง€ ์ž๋ฅด๊ณ  ์‹ถ๋‹ค์˜ ์ธ๋ฑ์Šค);

1.6 concat

๋‘๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ์ด์–ด ๋ถ™์—ฌ์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜

๋ฐฐ์—ด์ด๋ฆ„.concat(์ƒˆ๋กœ๋งŒ๋“ค ๋ฐฐ์—ด);

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ 2. ์ˆœํšŒ์™€ ํƒ์ƒ‰

5๊ฐ€์ง€ ์š”์†Œ ์ˆœํšŒ ๋ฐ ํƒ์ƒ‰ ๋ฉ”์„œ๋“œ

2.1 forEach

๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ๊ฐ์˜ ์š”์†Œ์— ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ

2.2 includes

๋ฐฐ์—ด์— ํŠน์ • ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ

2.3 indexOf

ํŠน์ • ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ์•ž์— ์œ„์น˜ํ•œ index๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -1 ๊ฐ’์„ ์ถœ๋ ฅ

์–•์€ ๋น„๊ต๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํผํ‹ฐ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
๋”ฐ๋ผ์„œ ์ด๋•Œ๋Š” findIndex๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

2.4 findIndex

๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ํ•จ์ˆ˜
ํŠน์ • ์š”์†Œ์˜ ์ธ๋ฑ์Šค(์œ„์น˜)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด -1 ๊ฐ’์„ ์ถœ๋ ฅ

ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค.

2.5 find

๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ๋Š”๋ฐ, ์š”์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ 3. ๋ณ€ํ˜•

5๊ฐ€์ง€์˜ ๋ฐฐ์—ด ๋ณ€ํ˜• ๋ฉ”์„œ๋“œ

3.1 filter

๊ธฐ์กด ๋ฐฐ์—ด์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋“ค๋งŒ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

3.2 map

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ๊ฐ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ’๋“ค์„ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

3.3 sort

๋ฑŒ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ

์ˆซ์ž์˜ ๋Œ€์†Œ๊ด€๊ณ„๋ฅผ ๋”ฐ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์†Œ๊ด€๊ณ„๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผํ•จ.

function compare(a, b) {
  if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  } else {
    return 0;
  }
}

let arr = [10, 5, 3];
arr.sort(compare);

console.log(arr); // [3, 5, 10]

3.4 toSorted

์ •๋ ฌ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

3.5 join

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ฑ ์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

๊ตฌ๋ถ„์ž๋Š” ๊ธฐ๋ณธ์ด , ์ธ๋ฐ, ๊ตฌ๋ถ„์ž๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐฐ์—ด์ด๋ฆ„.join(๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ตฌ๋ถ„์ž); ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

Date ๊ฐ์ฒด์™€ ๋‚ ์งœ

1. Date ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

let date1 = new Date(); //์ƒ์„ฑ์ž -> () ์•ˆ์ด ๋น„์–ด์žˆ์œผ๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„ ์ถœ๋ ฅ

let date2 = new Date("๋…„๋„/์›”/์ผ/์‹œ:๋ถ„:์ดˆ");

2. ํƒ€์ž„ ์Šคํƒฌํ”„

ํŠน์ • ์‹œ๊ฐ„์ด "0000๋…„๋„.00์›”.00์ผ 00์‹œ 00๋ถ„ 00์ดˆ"๋กœ ๋ถ€ํ„ฐ ๋ช‡ ms๊ฐ€ ์ง€๋‚ฌ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ˆซ์ž๊ฐ’

3. ์‹œ๊ฐ„ ์š”์†Œ๋“ค์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•

let year = date1.getFullYear();
let month = date1.getMonth() + 1; //๋‹ฌ์€ 0์›” ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ์— +1 ํ•ด์ค˜์•ผํ•œ๋‹ค. 
let date = date1.getDate();
let hour = date1.getHours();
let minute = date1.getMinutes();
let seconds = date1.getSeconds();

4. ์‹œ๊ฐ„ ์ˆ˜์ •ํ•˜๊ธฐ

date1.setFullYear(2023);
date1.setMonth(2); //3์›”์„ ์˜๋ฏธ
date1.setDate(30);
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);

5. ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ํฌ๋งท์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

console.log(date1.toDateString()); // Fri jul 04 2025
console.log(date1.toLocaleString()); // 2025.07.04

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

๋™๊ธฐ

์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ
Thread: ์ž‘์—…์„ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ณ  ๋˜ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์—ญํ• 
๋‹จ์ : ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

๋น„๋™๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฉ€ํ‹ฐ thread ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅ(thread ํ•˜๋‚˜๋งŒ ์กด์žฌ)ํ•˜์—ฌ, ๋‚˜ํƒ€๋‚œ ๋ฐฉ์‹
์•ž์„  ์ž‘์—…๋“ค์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋น„๋™๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ? Web APIs๋ผ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ„๋„์˜ ๊ณต๊ฐ„์—์„œ ๋”ฐ๋กœ ์‹คํ–‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌํ•˜๊ธฐ 1. ์ฝœ๋ฐฑ ํ•จ์ˆ˜

์ฝœ๋ฐฑํ•จ์ˆ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

function add(a, b, callback) {
  setTimeout(() => {
    const sum = a + b;
    callback(sum);
  }, 3000);
}

add(1, 2, (value) => {
  console.log(value); // 3
});

add ํ•จ์ˆ˜ ํ˜ธ์ถœ-> setTimeout ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ-> callback ํ•จ์ˆ˜๋ฅผ 3์ดˆ ๋’ค์— ์‹คํ–‰-> callback ํ•จ์ˆ˜์—์„œ sum์ด๋ผ๋Š” ๊ฐ’์„ ๊ณ„์‚ฐ-> ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ callbackํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœ-> setTimeout ํ•จ์ˆ˜๊ฐ€ ๋๋‚จ-> callback ํ•จ์ˆ˜๊ฐ€ ํ•œ๋ฒˆ ๋” ์‹คํ–‰-> ๋งค๊ฐœ๋ณ€์ˆ˜ 3 ๊ฐ’์ด ์ฝ˜์†”์— ์ถœ๋ ฅ

์ฝœ๋ฐฑํ•จ์ˆ˜ ์•ˆ ๋˜ ๋‹ค๋ฅธ ์ฝœ๋ฐฑํ•จ์ˆ˜ (์ฝœ๋ฐฑ์ง€์˜ฅ)

orderFood((food) => {
  console.log(food); 

  cooldownFood(food, (cooldownedFood) => {
    console.log(cooldownedFood); 

    freezeFood(cooldownedFood, (freezedFood) => {
      console.log(freezedFood); 
    });
  });
});

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ›์•„์˜จ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋˜ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ธ์ˆ˜๋กœ ๋„ฃ์–ด์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต์ด ๋˜๋‹ค ๋ณด๋ฉด์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๊ณ„์† ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ์ธ๋ดํŠธ(๋“ค์—ฌ์“ฐ๊ธฐ)๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๊นŠ์–ด์ง€๋ฉด์„œ ๊ฐ€๋…์„ฑ ์ €ํ•˜ => ์ฝœ๋ฐฑ์ง€์˜ฅ

๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌํ•˜๊ธฐ 2. Promise

๋น„๋™๊ธฐ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์žฅ ๊ฐ์ฒด
executor: ์‹ค์ œ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜

1. ๋Œ€๊ธฐ ์ƒํƒœ (Pending)

์•„์ง ์ž‘์—…์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ

2. ์„ฑ๊ณต ์ƒํƒœ (Fulfilled)

๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌ ๋œ ์ƒํƒœ
๋Œ€๊ธฐ -> ์„ฑ๊ณต ์ƒํƒœ : ํ•ด๊ฒฐ(resolve)

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log("์•ˆ๋…•");
    resolve();
  }, 2000);
});

setTimeout(() => {
  console.log(promise);
}, 3000); // ์•ˆ๋…•, [[PromiseState]]: "fulfilled"

PromiseState ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’ "fulfilled"

3. ์‹คํŒจ (Rejected)

๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ•œ ์ƒํƒœ
๋Œ€๊ธฐ -> ์‹คํŒจ ์ƒํƒœ: ๊ฑฐ๋ถ€(reject)

์˜ˆ์ œ

const promise = new Promise((resolve, reject) => {

  setTimeout(() => {
    console.log("์•ˆ๋…•");
    reject("์™œ ์‹คํŒจํ–ˆ๋Š”์ง€ ์ด์œ ...");
  }, 2000);
});

setTimeout(() => {
  console.log(promise);
}, 3000); //Uncaught (in promise) ์™œ ์‹คํŒจํ–ˆ๋Š”์ง€ ์ด์œ  ..., [[PromiseState]]: "rejected"

PromiseState ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’ "rejected"

then ๋ฉ”์„œ๋“œ

Promise๊ฐ€ ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด(resolve ํ˜ธ์ถœ), then ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰ & resolve ์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๊นŒ์ง€ ์ œ๊ณต

promise.then((value) => {
  console.log(value); // 20
});

catch ๋ฉ”์„œ๋“œ

Promise๊ฐ€ ์‹คํŒจํ•˜๊ฒŒ ๋˜๋ฉด(reject ํ˜ธ์ถœ), catch ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•œ ๊ณจ๋ฐฑ ํ•จ์ˆ˜ ์‹คํ–‰ & reject ์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๊นŒ์ง€ ์ œ๊ณต

promise.catch((error) => {
  console.log(error);
}); //num์ด ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. (์ฝ”๋“œ ์ƒ๋ ฅ: reject ํ•จ์ˆ˜ ๊ฒฐ๊ณผ ๊ฐ’)

then ๋ฉ”์„œ๋“œ & catch ๋ฉ”์„œ๋“œ

promise
	.then((value) => {
  		console.log(value); 
	})
	.catch((error) => {
  		console.log(error); 
    });

Promise ์™€ ์ฝœ๋ฐฑ์ง€์˜ฅ

add10(0)
  .then((result) => {
    console.log(result); 
    return add10(result);
  })
  .then((result) => {
    console.log(result);
  });

Promise๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค return(๋ฐ˜ํ™˜)์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜ํ™˜๋œ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋œ๋‹ค.

๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌํ•˜๊ธฐ 3. async/await

async

์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ
ํ•จ์ˆ˜๊ฐ€ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ

async function ํ•จ์ˆ˜๋ช…() //ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ฐ”๊ฟ”์คŒ

await

async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๋‹ค ์ฒ˜๋ฆฌ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ฌ๋ฆฌ๋Š” ์—ญํ• 
๋” ์ด์ƒ then ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ

async function printData() {
	const data = await getData(); 

await๋Š” ํ”„๋กœ๋ฏธ์Šค์˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ข…๋ฃŒ๊ฐ€ ๋˜๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์„ data ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€