๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ TIL

2์›” 2์ผ (1์›” 31์ผ ๋ณต์Šต) ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

by Sjungwon 2025. 2. 2.
// ๊ฐ์ฒด newYear๋ฅผ ์ •์˜ํ•จ
const newYear = {
  name: "์„์‚ฌ๋…„",  // key: "name", value: "์„์‚ฌ๋…„"
  number: 2025,    // key: "number", value: 2025
  wish: ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"],  // key: "wish", ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํฌ๋ง์‚ฌํ•ญ์„ ์ €์žฅ
  1: "์ˆซ์ž๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€์š”", // ์ˆซ์ž๋„ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ, ๊ถŒ์žฅ๋˜์ง€๋Š” ์•Š์Œ
  true: "๊ฐ€๋Šฅ?", // key๋กœ 'true'๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ, ์—ฌ๊ธฐ์„œ true๋Š” boolean์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž 'true'์ž„
  hello: function () {  // key: "hello", value: ํ•จ์ˆ˜ (function) 
    console.log("์•ˆ๋…•ํ•˜์„ธ์š”!");  // ํ•จ์ˆ˜ ์•ˆ์—์„œ "์•ˆ๋…•ํ•˜์„ธ์š”!" ์ถœ๋ ฅ
  },
};

// newYear ๊ฐ์ฒด์˜ "name" ํ”„๋กœํผํ‹ฐ ์ถœ๋ ฅ
console.log(newYear.name);  // ์ถœ๋ ฅ: "์„์‚ฌ๋…„"

// newYear ๊ฐ์ฒด์˜ "number" ํ”„๋กœํผํ‹ฐ ์ถœ๋ ฅ
console.log(newYear.number);  // ์ถœ๋ ฅ: 2025

// ๊ฐ์ฒด์—์„œ ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•  ๋•Œ
console.log(newYear["number"]);  // ์ถœ๋ ฅ: 2025

// ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์„ ์–ธ๋œ "wish" ๋ฐฐ์—ด ์ถœ๋ ฅ
console.log(newYear.wish);  // ์ถœ๋ ฅ: ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"]

// ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•œ "wish" ๋ฐฐ์—ด ์ถœ๋ ฅ (์œ„์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ)
console.log(newYear["wish"]);  // ์ถœ๋ ฅ: ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"]

// ์ˆซ์ž๋กœ ๋œ ํ”„๋กœํผํ‹ฐ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์„ ์ฒ˜๋ฆฌ๋จ
// console.log(newYear.1); // SyntaxError ๋ฐœ์ƒ!

// "1"์ด๋ผ๋Š” key๋กœ ์ ‘๊ทผ (๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ)
console.log(newYear["1"]);  // ์ถœ๋ ฅ: "์ˆซ์ž๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€์š”"

// "true"๋ผ๋Š” key๋กœ ์ ‘๊ทผ
console.log(newYear.true);  // ์ถœ๋ ฅ: "๊ฐ€๋Šฅ?"

// "hello" ํ•จ์ˆ˜ ์ถœ๋ ฅ (ํ•จ์ˆ˜ ์ž์ฒด ์ถœ๋ ฅ, ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ)
console.log(newYear.hello);  // ์ถœ๋ ฅ: function() { console.log("์•ˆ๋…•ํ•˜์„ธ์š”!"); }

// "hello" ํ•จ์ˆ˜ ํ˜ธ์ถœ (์ถœ๋ ฅ: "์•ˆ๋…•ํ•˜์„ธ์š”!")
console.log(newYear.hello());  // ์ถœ๋ ฅ: "์•ˆ๋…•ํ•˜์„ธ์š”!"
newYear.hello();  // ์ถœ๋ ฅ: "์•ˆ๋…•ํ•˜์„ธ์š”!"

// ------------------

// Object.keys()๋Š” ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ(ํ‚ค)๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
console.log(Object.keys(newYear));  // ์ถœ๋ ฅ: ["name", "number", "wish", "1", "true", "hello"]

// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹: "b" + "a" + +"a" + "a" => "banana"
console.log(("b" + "a" + +"a" + "a").toLowerCase());  // ์ถœ๋ ฅ: "banana"

// Object.values()๋Š” ๊ฐ์ฒด์˜ ๋ชจ๋“  ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
console.log(Object.values(newYear));  // ์ถœ๋ ฅ: ["์„์‚ฌ๋…„", 2025, ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"], "์ˆซ์ž๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€์š”", "๊ฐ€๋Šฅ?", function() { console.log("์•ˆ๋…•ํ•˜์„ธ์š”!"); }]

// Object.entries()๋Š” ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ‚ค์™€ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
console.log(Object.entries(newYear));  // ์ถœ๋ ฅ: [["name", "์„์‚ฌ๋…„"], ["number", 2025], ["wish", ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"]], ["1", "์ˆซ์ž๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€์š”"], ["true", "๊ฐ€๋Šฅ?"], ["hello", function() { console.log("์•ˆ๋…•ํ•˜์„ธ์š”!"); }]

// -------------------

// ๋ฐฐ์—ด ์ •์˜
const language = ["python", "js", "c++", 0, true, {}, []];

// ๋ฐฐ์—ด์—์„œ ํŠน์ • ๋ฒ”์œ„์˜ ์š”์†Œ๋ฅผ ์ถ”์ถœ (1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ 3๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€, ๋ ์ธ๋ฑ์Šค๋Š” ์ œ์™ธ)
console.log(language.slice(1, 3));  // ์ถœ๋ ฅ: ["js", "c++"]  (0๋ฒˆ ์ธ๋ฑ์Šค๋Š” ์ œ์™ธ, 3๋ฒˆ ์ธ๋ฑ์Šค๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ)

// ๋ฐฐ์—ด์˜ ๊ธธ์ด ์ถœ๋ ฅ
console.log(language.length);  // ์ถœ๋ ฅ: 6 (๋ฐฐ์—ด์˜ ์›์†Œ ๊ฐœ์ˆ˜)

// ๋ฐฐ์—ด์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑ
console.log(language.concat(language));  // ์ถœ๋ ฅ: ["python", "js", "c++", 0, true, {}, [], "python", "js", "c++", 0, true, {}, []]

// language ๋ฐฐ์—ด์„ 3๋ฒˆ ์—ฐ๊ฒฐํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด
const l2 = language.concat(language, language);  // ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑ
console.log(language);  // ์ถœ๋ ฅ: ["python", "js", "c++", 0, true, {}, []]
console.log(l2);  // ์ถœ๋ ฅ: ["python", "js", "c++", 0, true, {}, [], "python", "js", "c++", 0, true, {}, [], "python", "js", "c++", 0, true, {}, []]

// ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
l2.pop();  // ๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ
console.log(language);  // ์ถœ๋ ฅ: ["python", "js", "c++", 0, true, {}, []] (๋ณ€๊ฒฝ ์—†์Œ)
console.log(l2);  // ์ถœ๋ ฅ: ["python", "js", "c++", 0, true, {}, [], "python", "js", "c++", 0, true, {}, []]

// ๋ฐฐ์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผ (for๋ฌธ ์‚ฌ์šฉ)
for (let i = 0; i <= language.length; i++) {
  console.log(i, language[i]);  // ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์™€ ํ•ด๋‹น ๊ฐ’ ์ถœ๋ ฅ
  // ์–ธ๊ธ‰: ๋งŒ์•ฝ ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ธ๋ฑ์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด "undefined"๊ฐ€ ์ถœ๋ ฅ๋จ
}

// ๋ฐฐ์—ด์„ for...of๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผ (์ธ๋ฑ์Šค ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)
for (const v of language) {
  console.log(v);  // ๋ฐฐ์—ด์˜ ๊ฐ ๊ฐ’(v)์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถœ๋ ฅ
}

// ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ(key)๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผ
for (const key in newYear) {
  console.log(key, newYear[key]);  // ๊ฐ์ฒด์˜ key์™€ ํ•ด๋‹น ๊ฐ’(key์— ํ•ด๋‹นํ•˜๋Š” value)์„ ์ถœ๋ ฅ
}

 


๐Ÿ“Œ 1๋ฒˆ slice() ๋ฌธ์ œ ๋‹ต๋ณ€ โŒ (์˜ค๋ฅ˜ ์žˆ์Œ!)

js
๋ณต์‚ฌํŽธ์ง‘
const languages = ["Python", "JavaScript", "C++", "Ruby"]; const result = languages.slice(0, 2); // โŒ ์˜ค๋ฅ˜ ์žˆ์Œ! console.log(result); // ["JavaScript", "C++"] (โŒ ์ž˜๋ชป๋จ)

โŒ ๋ฌธ์ œ์ 

  • slice(0, 2)์„ ํ•˜๋ฉด "Python", "JavaScript"๊ฐ€ ๋‚˜์˜ด!
  • "JavaScript"์™€ "C++"๋งŒ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด?
    ๐Ÿ‘‰ slice(1, 3)์ด ์ •๋‹ต! โœ…
    js
    ๋ณต์‚ฌํŽธ์ง‘
    const result = languages.slice(1, 3); console.log(result); // ["JavaScript", "C++"]

๐Ÿ“Œ 2๋ฒˆ length ๋ฌธ์ œ ๋‹ต๋ณ€ โŒ (์˜ค๋ฅ˜ ์žˆ์Œ!)

js
๋ณต์‚ฌํŽธ์ง‘
const fruits = ["๐ŸŽ", "๐ŸŒ", "๐Ÿ‡", "๐Ÿ‰", "๐Ÿฅญ"]; console.log(fruits.length); // โ“ ๋ช‡์ด ๋‚˜์˜ฌ๊นŒ? -> 4? โŒ

๐Ÿ’ก ์˜ค๋‹ต!
โœ… fruits.length๋Š” 5๊ฐ€ ๋‚˜์™€!
์™œ๋ƒํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฑฐ์•ผ!

js
๋ณต์‚ฌํŽธ์ง‘
const fruits = ["๐ŸŽ", "๐ŸŒ", "๐Ÿ‡", "๐Ÿ‰", "๐Ÿฅญ"]; console.log(fruits.length); // 5 โœ…
  • "๐ŸŽ", "๐ŸŒ", "๐Ÿ‡", "๐Ÿ‰", "๐Ÿฅญ" → ์ด 5๊ฐœ๋‹ˆ๊นŒ 5๊ฐ€ ๋‚˜์˜ด!

๐Ÿ“Œ 3๋ฒˆ concat() ๋ฌธ์ œ ๋‹ต๋ณ€ โŒ (์˜ค๋ฅ˜ ์žˆ์Œ!)

js
๋ณต์‚ฌํŽธ์ง‘
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const result = concat(arr1, arr2); // โŒ ์˜ค๋ฅ˜! console.log(result); // [1, 2, 3, 4, 5, 6]

โŒ ๋ฌธ์ œ์ 
๐Ÿ‘‰ concat()์€ ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์•ผ!
๐Ÿ‘‰ concat(arr1, arr2); โŒ ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ์•ˆ ๋˜๊ณ , **arr1.concat(arr2);**๋ผ๊ณ  ์จ์•ผ ํ•ด!

โœ… ์ •๋‹ต

js
๋ณต์‚ฌํŽธ์ง‘
const result = arr1.concat(arr2); console.log(result); // [1, 2, 3, 4, 5, 6]

๐Ÿ’ก concat()์€ ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค!

js
๋ณต์‚ฌํŽธ์ง‘
console.log(arr1); // [1, 2, 3] (์›๋ณธ ์œ ์ง€!) console.log(arr2); // [4, 5, 6] (์›๋ณธ ์œ ์ง€!)

๐Ÿ“Œ 4๋ฒˆ pop() ๋ฌธ์ œ ๋‹ต๋ณ€ โŒ (์˜ค๋ฅ˜ ์žˆ์Œ!)

js
๋ณต์‚ฌํŽธ์ง‘
const numbers = [10, 20, 30, 40]; console.log(numbers.pop()); // โ“ ๋ฌด์—‡์ด ์ถœ๋ ฅ๋ ๊นŒ? -> 40 โœ… ์ •๋‹ต! console.log(numbers); // โ“ numbers ๋ฐฐ์—ด์€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ๊นŒ? -> [10, 20, 30, 40] โŒ (์˜ค๋ฅ˜ ์žˆ์Œ!)

โœ… ์ฒซ ๋ฒˆ์งธ ์ถœ๋ ฅ

js
๋ณต์‚ฌํŽธ์ง‘
console.log(numbers.pop()); // 40 โœ… (๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋จ!)

โŒ ๋‘ ๋ฒˆ์งธ ์ถœ๋ ฅ (์˜ค๋ฅ˜ ์žˆ์Œ!)

  • pop()์€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์•ผ!
  • ์ฆ‰, numbers ๋ฐฐ์—ด์—์„œ 40์ด ์‚ฌ๋ผ์ง!

โœ… ์ •๋‹ต

js
๋ณต์‚ฌํŽธ์ง‘
console.log(numbers); // [10, 20, 30] โœ…

๐Ÿ“Œ pop()์€ ์›๋ณธ ๋ฐฐ์—ด์„ ๋ฐ”๊พผ๋‹ค! (40์ด ์‚ฌ๋ผ์ง!)


๐Ÿ“Œ 5๋ฒˆ for ๋ฐ˜๋ณต๋ฌธ ๋ฌธ์ œ โœ… ์ •๋‹ต!

js
๋ณต์‚ฌํŽธ์ง‘
const pets = ["๐Ÿถ", "๐Ÿฑ", "๐Ÿน"]; for (let i = 0; i < pets.length; i++) { console.log(pets[i]); }

โœ… ์ •๋‹ต: 3๋ฒˆ ์ถœ๋ ฅ๋จ!
โœ” pets.length๊ฐ€ 3์ด๋‹ˆ๊นŒ i = 0, 1, 2๊นŒ์ง€๋งŒ ์‹คํ–‰๋จ!
โœ” i = 3์ด ๋˜๋ฉด i < pets.length ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด๋ผ ๋ฉˆ์ถค!

์ถœ๋ ฅ

๋ณต์‚ฌํŽธ์ง‘
๐Ÿถ ๐Ÿฑ ๐Ÿน

๐Ÿ“Œ 6๋ฒˆ for...of ์„ค๋ช…๊ณผ ๋‹ต โœ…

js
๋ณต์‚ฌํŽธ์ง‘
const colors = ["๐Ÿ”ด", "๐ŸŸข", "๐Ÿ”ต"]; for (const color of colors) { console.log(color); }

๐Ÿ’ก for...of๋ž€?
๐Ÿ‘‰ ๋ฐฐ์—ด์˜ ์š”์†Œ(๊ฐ’)๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ˜๋ณต๋ฌธ!
๐Ÿ‘‰ for (const ๋ณ€์ˆ˜ of ๋ฐฐ์—ด) {}
๐Ÿ‘‰ color์— ๋ฐฐ์—ด์˜ ๊ฐ’ ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐ!

๐Ÿ“Œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ

๋ณต์‚ฌํŽธ์ง‘
๐Ÿ”ด ๐ŸŸข ๐Ÿ”ต

โœ… ์ •๋ฆฌ

  • for...of๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ!
  • for๋ฌธ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ!

๐Ÿ“Œ 7๋ฒˆ for...in ์„ค๋ช…๊ณผ ๋‹ต โœ…

js
const student = { name: "Alice", age: 14, hobby: "์ถ•๊ตฌ" }; for (const key in student) { console.log(key, student[key]); }โ€‹
๋ณต์‚ฌํŽธ์ง‘
const student = { name: "Alice", age: 14, hobby: "์ถ•๊ตฌ" }; for (const key in student) { console.log(key, student[key]); }

๐Ÿ’ก for...in์ด๋ž€?
๐Ÿ‘‰ ๊ฐ์ฒด(Object)์˜ ํ‚ค(key)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ˜๋ณต๋ฌธ!
๐Ÿ‘‰ for (const ๋ณ€์ˆ˜ in ๊ฐ์ฒด) {}
๐Ÿ‘‰ key์—๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„(ํ‚ค)์ด ๋“ค์–ด๊ฐ!

๐Ÿ“Œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ

nginx
๋ณต์‚ฌํŽธ์ง‘
name Alice age 14 hobby ์ถ•๊ตฌ

โœ… ์ •๋ฆฌ

  • for...in์€ ๊ฐ์ฒด ์•ˆ์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ!
  • ๋ฐฐ์—ด์—๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ! (for...of๊ฐ€ ๋” ์ ํ•ฉ)

๐ŸŽฏ ์ตœ์ข… ์ •๋ฆฌ

๊ฐœ๋…์„ค๋ช…์˜ˆ์ œ

slice(1, 3) ๋ฐฐ์—ด์„ ์ž˜๋ผ์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ (๋์ ์€ ํฌํ•จX) arr.slice(1, 3)
length ๋ฐฐ์—ด ๊ธธ์ด ํ™•์ธ arr.length
concat() ๋ฐฐ์—ด์„ ํ•ฉ์ณ์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ (์›๋ณธ ์œ ์ง€) arr.concat(arr2)
pop() ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ (์›๋ณธ ๋ณ€๊ฒฝ๋จ) arr.pop()
for ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต for (let i = 0; i < arr.length; i++)
for...of ๋ฐฐ์—ด ์š”์†Œ(๊ฐ’)๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ for (const v of arr)
for...in ๊ฐ์ฒด์˜ ํ‚ค(key) ๊ฐ€์ ธ์˜ค๊ธฐ for (const key in obj)

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

โœ… ๋ฐฐ์—ด์„ ์ž๋ฅด๊ฑฐ๋‚˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ๋•Œ slice(), length
โœ… ๋ฐฐ์—ด์„ ํ•ฉ์น  ๋•Œ concat()์„ ์‚ฌ์šฉ (์›๋ณธ ๋ณ€๊ฒฝโŒ)
โœ… ๋ฐฐ์—ด์—์„œ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ pop() ์‚ฌ์šฉ (์›๋ณธ ๋ณ€๊ฒฝโญ•)
โœ… ๋ฐ˜๋ณต๋ฌธ for, for...of, for...in์˜ ์ฐจ์ด์  ์ดํ•ดํ•˜๊ธฐ


๋ฌธ์ œ. ๋ฐ ํ”„๋กฌํ”„ํŠธ ์„ค๋ช…

๋‚˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ nextjs๋กœ ํ’€์Šคํƒ์„ ์ง€๋งํ•˜๋Š” ๊ณง ์กธ์—…์„ ์•ž๋‘” ์กธ์—…์ž‘ํ’ˆ์—์„œ ์‹ค์ œ ๋ฐฐํฌ๋ฅผ ๊ฒช๊ณ  ์—ฌ๋Ÿฌ ํ•ด์ปคํ†ค๋„ ์ง„ํ–‰ํ•ด๋ณธ ์ˆ˜์ค€์˜ ๊ฐœ๋ฐœ์ž์•ผ.
๋‚˜๋ฅผ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„๋ฅผ ์œ„ํ•œ ํ˜„์žฌ 1์›” 31์ผ๋ถ€ํ„ฐ 3์›” 1์ผ๊นŒ์ง€์˜ ์ปค๋ฆฌํ˜๋Ÿผ์„ ์งœ์ค˜.
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ Lv1, Lv2, Lv3 ๋ฌธ์ œ์™€ ๊ณ ๋“์  ํ‚คํŠธ, ์นด์นด์˜ค ๊ธฐ์ถœ ๋ฌธ์ œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ™œ์šฉํ•ด์„œ ์ž‘์„ฑํ•ด์ฃผ๊ณ  ํŽธ์˜์ƒ ๋งํฌ๋ฅผ ๊ผญ ํฌํ•จํ•ด์ค˜.

/*
ํžŒํŠธ: 
- ์ตœ์ข… ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์‚ฌ์šฉ์ž์˜ ์ตœ์ข… ๋‹‰๋„ค์ž„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค
- ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ userId๋ฅผ key๋กœ, ์ตœ์‹  ๋‹‰๋„ค์ž„์„ value๋กœ ์ €์žฅํ•˜๋ฉด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค
- ์ž…์žฅ/ํ‡ด์žฅ ๊ธฐ๋ก์€ ๋ณ„๋„๋กœ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€, ๋งˆ์ง€๋ง‰์— ์ตœ์ข… ๋‹‰๋„ค์ž„๊ณผ ํ•ฉ์ณ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค
*/

function solution(record) {
    // 1. userId๋ฅผ key๋กœ ํ•˜๊ณ  ๋‹‰๋„ค์ž„์„ value๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์„ธ์š”
    const obj = {};

    // 2. ์ž…์žฅ/ํ‡ด์žฅ ๊ธฐ๋ก์„ ๋‹ด์„ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜์„ธ์š”
    const rec = [];

    // 3. record ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ํ–‰๋™(Enter/Leave/Change)์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜์„ธ์š”
    for (const v of record) {
        // 3-1. ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜์„ธ์š” (์•ˆ ๋ฐฐ์šด ๊ฑด ๊ฒ€์ƒ‰์ด๋‚˜ ์ถ”๊ฐ€ ๊ณต๋ถ€)
        const result = v.split(" "); // ๊ฒฐ๊ณผ๊ฐ€ ๋ญ์•ผ? -> array -> ์ธ๋ฑ์Šค 0, 1, 2...

        // 3-2. ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด(action)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์„ธ์š”
        if (result[0] == "Enter") {
            // Enter์ธ ๊ฒฝ์šฐ: 
            // - userId(๋‘๋ฒˆ์งธ, 1)์™€ ๋‹‰๋„ค์ž„(์„ธ๋ฒˆ์งธ, 2)์„ ๊ฐ์ฒด์— ์ €์žฅ
            obj[result[1]] = result[2]; // ๊ฐ๊ฐ์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์„œ ๋บ€๋‹ค์Œ์— ๋Œ€์ž…ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.
            // ์ฃผ์„๊ณผ ์ฝ˜์†”๋กœ ์ถœ๋ ฅํ•˜๋ฉด์„œ ํ‘œ์‹œํ•˜๋ฉด์„œ ๊ฐ€๋ฉด ๋” ์ข‹๋‹ค...
            // - ์ž…์žฅ ๊ธฐ๋ก ์ถ”๊ฐ€ (๊ธฐ๋ก -> ๋ฐฐ์—ด ์ถ”๊ฐ€ -> ๋ ์ถ”๊ฐ€ -> ... push)
            rec.push(`${result[1]}๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.`); // ๋‚˜์ค‘์— ๋‹‰๋„ค์ž„์ด ์ตœ์ข… ํ™•์ •๋˜๋ฉด
            // replace๋ผ๋Š” ๊ฑธ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์š”.

        } else if (result[0] == "Leave") {
            // Leave์ธ ๊ฒฝ์šฐ:
            // - ํ‡ด์žฅ ๊ธฐ๋ก ์ถ”๊ฐ€
            rec.push(`${result[1]}๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.`); // ๋‚˜์ค‘์— ๋‹‰๋„ค์ž„์ด ์ตœ์ข… ํ™•์ •๋˜๋ฉด
        } else if (result[0] == "Change") {
            // Change์ธ ๊ฒฝ์šฐ:
            // - userId์˜ ๋‹‰๋„ค์ž„๋งŒ ๊ฐฑ์‹ 
            obj[result[1]] = result[2];
        }
    }

    // 4. ๋ชจ๋“  ๊ธฐ๋ก์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ตœ์ข… ๋ฉ”์‹œ์ง€ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์„ธ์š”
    return rec;
}

// -------------------------------------------------------

/*
ํžŒํŠธ: 
- ์ตœ์ข… ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์‚ฌ์šฉ์ž์˜ ์ตœ์ข… ๋‹‰๋„ค์ž„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค
- ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ userId๋ฅผ key๋กœ, ์ตœ์‹  ๋‹‰๋„ค์ž„์„ value๋กœ ์ €์žฅํ•˜๋ฉด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค
- ์ž…์žฅ/ํ‡ด์žฅ ๊ธฐ๋ก์€ ๋ณ„๋„๋กœ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€, ๋งˆ์ง€๋ง‰์— ์ตœ์ข… ๋‹‰๋„ค์ž„๊ณผ ํ•ฉ์ณ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค
*/

function solution(record) {
    // 1. userId๋ฅผ key๋กœ ํ•˜๊ณ  ๋‹‰๋„ค์ž„์„ value๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์„ธ์š”
    const userInfo = {};

    // 2. ์ž…์žฅ/ํ‡ด์žฅ ๊ธฐ๋ก์„ ๋‹ด์„ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜์„ธ์š”
    const messages = [];

    // 3. record ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ํ–‰๋™(Enter/Leave/Change)์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜์„ธ์š”
    for (const log of record) {
        // 3-1. ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜์„ธ์š”
        const [action, userId, nickname] = log.split(" ");

        // 3-2. ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด(action)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์„ธ์š”
        if (action === "Enter") {
            // Enter์ธ ๊ฒฝ์šฐ: 
            // - userId์™€ ๋‹‰๋„ค์ž„์„ ๊ฐ์ฒด์— ์ €์žฅ
            userInfo[userId] = nickname;
            // - ์ž…์žฅ ๊ธฐ๋ก ์ถ”๊ฐ€
            messages.push([userId, "๋‹˜์ด ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค."]);

        } else if (action === "Leave") {
            // Leave์ธ ๊ฒฝ์šฐ:
            // - ํ‡ด์žฅ ๊ธฐ๋ก ์ถ”๊ฐ€
            messages.push([userId, "๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค."]);

        } else if (action === "Change") {
            // Change์ธ ๊ฒฝ์šฐ:
            // - userId์˜ ๋‹‰๋„ค์ž„๋งŒ ๊ฐฑ์‹ 
            userInfo[userId] = nickname;
        }
    }

    // 4. ๋ชจ๋“  ๊ธฐ๋ก์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ตœ์ข… ๋ฉ”์‹œ์ง€ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์„ธ์š”
    return messages.map(([userId, message]) => userInfo[userId] + message);
}

 

JavaScript ํ•ต์‹ฌ 5 (ํ•จ์ˆ˜ 1)

// "๐Ÿ˜ ์—ฌ๊ธฐ์„œ"๋ฅผ ์ถœ๋ ฅ
console.log("๐Ÿ˜ ์—ฌ๊ธฐ์„œ");

// ํ•จ์ˆ˜ ์„ ์–ธ์€ ํ˜ธ์ด์ŠคํŒ…(hoisting)์œผ๋กœ ์ธํ•ด, ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•จ
myFun(); // ์‹คํ–‰๋œ๋‹ค. (ํ˜ธ์ด์ŠคํŒ… ๋•๋ถ„์—, ์•„๋ž˜์—์„œ ์„ ์–ธ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค)

// ํ•จ์ˆ˜ ์„ ์–ธ (function declaration)
function myFun() {
  console.log("์•ˆ๋…•ํ•˜์„ธ์š”!");  // ํ•จ์ˆ˜ ๋‚ด์—์„œ "์•ˆ๋…•ํ•˜์„ธ์š”!" ์ถœ๋ ฅ
}

// "๐Ÿ˜Š ์ €๊ธฐ์„œ"๋ฅผ ์ถœ๋ ฅ
console.log("๐Ÿ˜Š ์ €๊ธฐ์„œ");

// ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅ (ํ•จ์ˆ˜ ์ž์ฒด๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ)
console.log(myFun); // ์ถœ๋ ฅ: [Function: myFun]

// ํ•จ์ˆ˜ ํ˜ธ์ถœ (ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ถœ๋ ฅ๊ฐ’์„ ํ™•์ธ)
myFun();  // "์•ˆ๋…•ํ•˜์„ธ์š”!" ์ถœ๋ ฅ

// myFun()์˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
console.log(myFun());  // "์•ˆ๋…•ํ•˜์„ธ์š”!" ์ถœ๋ ฅ ํ›„, return ๊ฐ’์€ undefined

// ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์„ ์–ธ๋˜์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ
// ReferenceError: Cannot access 'yourFun' before initialization
const yourFun = function () {
  console.log("์—ฌ๋Ÿฌ๋ถ„ ๋ˆˆ ์˜ค๋Š” ๊ณณ์— ๊ณ„์‹œ๋‚˜์š”?");  // ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
};
yourFun();  // ํ•จ์ˆ˜ ํ˜ธ์ถœ, "์—ฌ๋Ÿฌ๋ถ„ ๋ˆˆ ์˜ค๋Š” ๊ณณ์— ๊ณ„์‹œ๋‚˜์š”?" ์ถœ๋ ฅ

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (arrow function) ์‚ฌ์šฉ ์˜ˆ์‹œ
// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
merge("ํŒŒ์ด์ฌ", "SQL");

// ์ผ๋ฐ˜ ํ•จ์ˆ˜ ์„ ์–ธ (function declaration)
function merge(a, b) {
  console.log(`${a}์™€ ${b}๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!`);  // ๋งค๊ฐœ๋ณ€์ˆ˜ a์™€ b๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ
}

// merge ํ•จ์ˆ˜ ํ˜ธ์ถœ
merge("ํŒŒ์ด์ฌ", "SQL"); //ํŒŒ์ด์ฌSQL ๋ถ™์Œ

// ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ๋˜ ๋“ฑ์žฅ. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ merge2
const merge2 = function (a, b) {
  console.log(`${a}์™€ ${b}๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!!!`);  // ํ‘œํ˜„์‹์œผ๋กœ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜
}; 
merge2("์ž๋ฐ”", "๋„์ปค");  // "์ž๋ฐ”์™€ ๋„์ปค๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!!!" ์ถœ๋ ฅ

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋œ merge3
const merge3 = (a, b) => {
  console.log(`${a}์™€ ${b}๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!!!`);  // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜
};
merge3("HTML", "GitHub");  // "HTML์™€ GitHub๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!!!" ์ถœ๋ ฅ

// return์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ merge4
const merge4 = (a, b) => {
  console.log(`${a}์™€ ${b}๋Š” ๋จธ์ง€๋˜์—ˆ๋‹ค!!!`);  // ์ถœ๋ ฅ๋ฌธ
  return "๊ฒฐ๊ณผ";  // ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด "๊ฒฐ๊ณผ"๋ฅผ ๋ฐ˜ํ™˜
};
console.log(merge4("๋‘", "๋‘ฅ"));  // "๋‘์™€ ๋‘ฅ์€ ๋จธ์ง€๋˜์—ˆ๋‹ค!!!" ์ถœ๋ ฅ ํ›„, "๊ฒฐ๊ณผ" ์ถœ๋ ฅ

// return ๊ฐ’์ด ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ merge5
const merge5 = (a, b) => a + b;  // return๋ฌธ ์ƒ๋žต ๊ฐ€๋Šฅ
console.log(merge5(1, 2));  // ์ถœ๋ ฅ: 3

// ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ return์„ ๋ช…์‹œ์ ์œผ๋กœ ์จ์•ผ ํ•จ
// ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Œ.

// ๊ธฐ๋ณธ๊ฐ’ ๋งค๊ฐœ๋ณ€์ˆ˜ ์˜ˆ์‹œ
function eat(menu = "๋ฐฅ") {
  console.log(`${menu}์„(๋ฅผ) ๋จน๋Š”๋‹ค`);  // ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ "๋ฐฅ"์„ ์„ค์ •ํ•˜๊ณ  ์ถœ๋ ฅ
}

eat();  // ์ถœ๋ ฅ: "๋ฐฅ์„(๋ฅผ) ๋จน๋Š”๋‹ค" (๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)

// ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค
function test1(a = 1, b = 2) {
  console.log(a, b);  // a์™€ b๋ฅผ ์ถœ๋ ฅ
}

function test2(a, b = 2) {
  console.log(a, b);  // b๋Š” ๊ธฐ๋ณธ๊ฐ’ 2๋กœ ์„ค์ •
}

function test3(a = 2, b) {
  console.log(a, b);  // a๋Š” ๊ธฐ๋ณธ๊ฐ’ 2, b๋Š” ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’
}

test1();      // ์ถœ๋ ฅ: 1 2 (๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)
test1(1);     // ์ถœ๋ ฅ: 1 2 (๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)
test1(1, 2);  // ์ถœ๋ ฅ: 1 2 (๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ ์•ˆํ•จ)
test2();      // ์ถœ๋ ฅ: undefined 2 (a๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š์•„ undefined, b๋Š” ๊ธฐ๋ณธ๊ฐ’ 2)
test2(1);     // ์ถœ๋ ฅ: 1 2
test2(1, 2);  // ์ถœ๋ ฅ: 1 2
test3();      // ์ถœ๋ ฅ: 2 undefined (a๋Š” ๊ธฐ๋ณธ๊ฐ’ 2, b๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š์•„์„œ undefined)
test3(1);     // ์ถœ๋ ฅ: 1 undefined
test3(1, 2);  // ์ถœ๋ ฅ: 1 2

// ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜ (rest parameter) ์˜ˆ์‹œ
function sum(...numbers) {
  console.log(numbers);  // ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ชจ๋“  ์ธ์ˆ˜ ์ถœ๋ ฅ
}

sum(1, 2, 3);  // ์ถœ๋ ฅ: [1, 2, 3]

// ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฐœ์ˆ˜์˜ ์ธ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌ
function ourFun(a, b, ...c) {
  console.log(a, b, c);  // ์ฒซ ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ, ๋‚˜๋จธ์ง€๋Š” ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌ
}

ourFun();  // ์ถœ๋ ฅ: undefined undefined [] (๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ)

// ํด๋กœ์ € ์˜ˆ์‹œ
function createCounter() {
  let count = 0;  // ๋‚ด๋ถ€ ๋ณ€์ˆ˜ count ์„ ์–ธ
  return function () {
    return ++count;  // count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋ฐ˜ํ™˜
  };
}

const counter = createCounter();  // createCounter ํ˜ธ์ถœ๋กœ counter ํ•จ์ˆ˜ ์ƒ์„ฑ
console.log(counter());  // ์ถœ๋ ฅ: 1
console.log(counter());  // ์ถœ๋ ฅ: 2
console.log(counter());  // ์ถœ๋ ฅ: 3

// ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํ•จ์ˆ˜ ์˜ˆ์‹œ (return์ด ์—†๋Š” ๊ฒฝ์šฐ)
function funfun1() {
  // ์ž๋™์œผ๋กœ ๋์— return์ด ์žˆ๋Š” ์…ˆ
}

console.log(funfun1);  // ํ•จ์ˆ˜ ์ž์ฒด ์ถœ๋ ฅ: [Function: funfun1]
console.log(funfun1());  // ์‹คํ–‰ ํ›„ ๋ฐ˜ํ™˜๊ฐ’์€ undefined (return์ด ์—†์œผ๋ฏ€๋กœ)

function funfun2() {
  return;  // ํ•จ์ˆ˜ ์ข…๋ฃŒ, ์ด ํ›„ ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ
  console.log("๋ญ๊ฐ€ ์žˆ์–ด๋„ ๋„๋‹ฌ ๋ชปํ•จ");  // ์ด ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ
}

console.log(funfun2);  // ํ•จ์ˆ˜ ์ž์ฒด ์ถœ๋ ฅ: [Function: funfun2]
console.log(funfun2());  // ์‹คํ–‰ ํ›„ ๋ฐ˜ํ™˜๊ฐ’์€ undefined (return์œผ๋กœ ํ•จ์ˆ˜ ์ข…๋ฃŒ)

function funfun3() {
  return 1;  // 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ•จ์ˆ˜ ์ข…๋ฃŒ
  console.log("๋ญ๊ฐ€ ์žˆ์–ด๋„ ๋„๋‹ฌ ๋ชปํ•จ");  // ์ด ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ
}

console.log(funfun3);  // ํ•จ์ˆ˜ ์ž์ฒด ์ถœ๋ ฅ: [Function: funfun3]
console.log(funfun3());  // ์ถœ๋ ฅ: 1 (return ๊ฐ’์ด 1)

ํ•จ์ˆ˜

  • JavaScript์—์„œ ํ•จ์ˆ˜๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋…๋ฆฝ๋œ ์ฝ”๋“œ ๋ธ”๋ก
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„

ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹

ํ•จ์ˆ˜ ์„ ์–ธ

  • ํ•จ์ˆ˜ ์„ ์–ธ์€ function ํ‚ค์›Œ๋“œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ •์˜
  • ํ•จ์ˆ˜ ์„ ์–ธ์€ **ํ˜ธ์ด์ŠคํŒ…(hoisting)**๋˜๋ฏ€๋กœ, ํ•จ์ˆ˜ ์ •์˜ ์ด์ „์— ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ
function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Alice")); // ์ถœ๋ ฅ: Hello, Alice!
๋”๋ณด๊ธฐ

function์€ "๋‚ด๊ฐ€ ๋จผ์ € ์„ ์–ธํ•ด๋„ ์–ด๋””์„œ๋“  ์“ธ ์ˆ˜ ์žˆ์–ด!"

const ๋Š” "๋‚ด๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ๋‚˜๋ฅผ ๋ถ€๋ฅด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜!"

๋ผ์„œ
๐Ÿ“Œ function()์€ ๋งˆ๋ฒ•์˜ ์ฃผ๋ฌธ(ํ•จ์ˆ˜)๊ณผ ๊ฐ™์•„!
๐Ÿ“Œ ์ฃผ๋ฌธ์„ ๊ทธ๋ƒฅ ์ ์–ด๋‘๋ฉด ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ  ๋‹ค์‹œ ๋ชป ์จ!

     ์˜ˆ). function () ์ด๋ผ๊ณ ๋งŒ ํ•ด์•ผ์ง€ ๋‹ค์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅ
๐Ÿ“Œ function()์„ ์“ฐ๋ฉด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด!

๐Ÿ“Œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(() => {})๋ฅผ ์“ฐ๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด!

๊ฒฐ๊ตญ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” 
const magicBook = {

  spell: function () {

  console.log("๋ถˆ๊ฝƒ ๋งˆ๋ฒ•์„ ์‹œ์ „ํ•ฉ๋‹ˆ๋‹ค");

 }

};

๋ฅผ

const magicBook = {

  spell: () => {

  console.log

  }

};

 

์ด๋ ‡๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ตญ  => ์ด๊ฒƒ์€ 

๋ฐฉ์‹์ฝ”๋“œ ์˜ˆ์ œํŠน์ง•
๋”๋ณด๊ธฐ
function const hi = function() { return "์•ˆ๋…•!"; } ๊ธฐ๋ณธ์ ์ธ ํ•จ์ˆ˜ ์„ ์–ธ
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ const hi = () => { return "์•ˆ๋…•!"; } function์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„
๋” ์งง๊ฒŒ const hi = () => "์•ˆ๋…•!"; ์ค‘๊ด„ํ˜ธ {}์™€ return ์ƒ๋žต ๊ฐ€๋Šฅ

 

 

1. ๊ฐ์ฒด (Object)

๋จผ์ €, newYear๋Š” ๊ฐ์ฒด(Object)์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์ด์—์š”. ๊ฐ ํ‚ค๋Š” ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•˜์ง€๋งŒ, ์ˆซ์ž๋‚˜ true ๊ฐ™์€ ๊ฒƒ๋„ ํ‚ค๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

const newYear = {
  name: "์„์‚ฌ๋…„",            // ๋ฌธ์ž์—ด ๊ฐ’
  number: 2025,              // ์ˆซ์ž ๊ฐ’
  wish: ["๊ฑด๊ฐ•", "๋‹ค์ด์–ดํŠธํ•˜๊ธฐ", "์ž˜์ต์€ ๊ฐ์ž๊ฐ€ ๋˜๊ธฐ", "์ทจ์—…"], // ๋ฐฐ์—ด ๊ฐ’
  1: "์ˆซ์ž๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€์š”",  // ์ˆซ์ž ํ‚ค (๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ)
  true: "๊ฐ€๋Šฅ?",            // boolean true๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉ (๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ)
  hello: function () {      // ๋ฉ”์„œ๋“œ(ํ•จ์ˆ˜)
    console.log("์•ˆ๋…•ํ•˜์„ธ์š”!");
  },
};โ€‹
 
 

๊ฐ์ฒด์˜ ํŠน์ง•

  • newYear.name์ฒ˜๋Ÿผ ์  ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • newYear["number"]์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ๋„ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.

๊ฒฐ๋ก  = newYear.name ์ด๋“  newYear["name"] ์ด๋“  ๊ฐ™์Œ

๋ฌธ์ž์—ด ํ‚ค์™€ ์ˆซ์ž ํ‚ค

  • "1"๊ณผ true์™€ ๊ฐ™์€ ํŠน์ˆ˜ํ•œ ๊ฐ’์„ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ! ์ด์œ ๋Š” ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋ฌธ์ œ์™€ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, newYear.true๋Š” true๋ผ๋Š” ์†์„ฑ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, **๋ฌธ์ž์—ด "true"**๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก  -> 1 ์ด๋ผ๋Š” ๊ธ€์ž true๋ผ๋Š” ๊ธ€์ž! ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค. 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์— ์ต๋ช… ํ•จ์ˆ˜(์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜)๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์ •์˜
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํ•จ์ˆ˜ ์ •์˜ ์ดํ›„์—๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ
const greetExpression = function(name) {
    return `Hello, ${name}!`;
};

console.log(greetExpression("Bob")); // ์ถœ๋ ฅ: Hello, Bob!

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ES6์—์„œ ๋„์ž…๋œ ๊ฐ„๊ฒฐํ•œ ํ•จ์ˆ˜ ํ‘œํ˜„ ๋ฐฉ์‹
  • ๊ธฐ์กด ํ•จ์ˆ˜ ํ‘œํ˜„์‹๋ณด๋‹ค ์งง๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, this ๋ฐ”์ธ๋”ฉ์ด ๊ณ ์ •๋˜๋Š” ํŠน์„ฑ์ด ์žˆ์Œ
const add = (a, b) => a + b;

const multiply = (a, b) => {
    let result = a * b;
    return result;
};

console.log(add(2, 3)); // ์ถœ๋ ฅ: 5
console.log(multiply(4, 5)); // ์ถœ๋ ฅ: 2

๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ, ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ•  ์ž…๋ ฅ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.
๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์˜† ๊ด„ํ˜ธ () ์•ˆ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ๊ฐ’์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ
function greet(name = "Guest") {
    return `Hello, ${name}!`;
}

console.log(greet()); // ์ถœ๋ ฅ: Hello, Guest!
console.log(greet("Alice")); // ์ถœ๋ ฅ: Hello, Alice!

console.log(greet("alice")); ๋ผ๊ณ  ํ•˜๋ฉด ์ด์ œ hello ์•จ๋ฆฌ์Šค๊ฐ€ ๋œ๋‹ค๋Š” ๊ฑฐ์ง€?

๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

  • ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ์ธ์ˆ˜๋“ค์„ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
function sum(...numbers) {
    return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // ์ถœ๋ ฅ: 15

์ฝœ๋ฐฑ ํ•จ์ˆ˜

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์ „๋‹ฌ๋˜์–ด, ๊ทธ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
  • ์ฝœ๋ฐฑ์€ ๋น„๋™๊ธฐ ์ž‘์—…์ด๋‚˜ ๊ณ ์ฐจ ํ•จ์ˆ˜ ๊ตฌํ˜„์— ์œ ์šฉ
function processArray(arr, callback) {
    const result = [];
    for (let i = 0; i < arr.length; i++) {
        result.push(callback(arr[i]));
    }
    return result;
}

const numbers = [1, 2, 3, 4, 5];
const doubled = processArray(numbers, function(num) {
    return num * 2;
});

console.log(doubled); // ์ถœ๋ ฅ: [2, 4, 6, 8, 10]
๋”๋ณด๊ธฐ

result๋Š”  ๋นˆ ๋ฐฐ์—ด๋กœ ์‹œ์ž‘ํ–ˆ์–ด.  ๊ทธ๋ž˜์„œ result.push(๊ฐ’)์€ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

arr[i]์€ ์ˆœ์„œ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฑฐ์•ผ. ๊ทธ๋Ÿผ []์— 1,2,3,4,5 


ํด๋กœ์ €์™€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ

ํด๋กœ์ €

  • ํด๋กœ์ €๋Š” ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ(lexical environment)์˜ ์กฐํ•ฉ
  • ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
function createCounter() {
    let count = 0;
    return function() {
        return ++count;
    };
}

const counter = createCounter();
console.log(counter()); // ์ถœ๋ ฅ: 1
console.log(counter()); // ์ถœ๋ ฅ: 2
console.log(counter()); // ์ถœ๋ ฅ: 3

๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ

  • ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋œ ์œ„์น˜์— ๋”ฐ๋ผ ๋ณ€์ˆ˜์™€ ์Šค์ฝ”ํ”„๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฐฉ์‹
  • JavaScript๋Š” ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€์ˆ˜์™€ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ต
  • ์‰ฝ๊ฒŒ ๋งํ•ด, ํ•จ์ˆ˜๊ฐ€ ์–ด๋””์—์„œ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ, ์–ด๋””์—์„œ ์ •์˜๋˜์—ˆ๋Š”์ง€๊ฐ€ ์ค‘์š”
function outer() {
    let outerVar = "I am outer";

    function inner() {
        console.log(outerVar); // ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
    }

    return inner;
}

const myInner = outer(); // outer๊ฐ€ ์‹คํ–‰๋˜๊ณ  inner ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋จ
myInner(); // ์ถœ๋ ฅ: I am outer
  • ์œ„ ์ฝ”๋“œ์—์„œ inner ํ•จ์ˆ˜๋Š” outer ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„์— ์žˆ๋Š” outerVar์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ → inner ํ•จ์ˆ˜๊ฐ€ outer ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ •์˜๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ

์Šค์ฝ”ํ”„

JavaScript์—์„œ ์Šค์ฝ”ํ”„๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ •์˜

  • ์ „์—ญ ์Šค์ฝ”ํ”„: ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ง€์—ญ ์Šค์ฝ”ํ”„: ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
let globalVar = "I am global";

function testScope() {
    let localVar = "I am local";
    console.log(globalVar); // ์ถœ๋ ฅ: I am global
    console.log(localVar);  // ์ถœ๋ ฅ: I am local
}

console.log(globalVar); // ์ถœ๋ ฅ: I am global
// console.log(localVar); // ์˜ค๋ฅ˜: localVar is not defined

ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’

  • ํ•จ์ˆ˜๋Š” return ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ™˜๊ฐ’์ด ์—†์œผ๋ฉด ํ•จ์ˆ˜๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜:

// ๊ธฐ๋ณธ ํ•จ์ˆ˜ ์„ ์–ธ
const add = function (a, b) {
  return a + b;  // ๋‘ ๊ฐ’์„ ๋”ํ•ด์„œ ๋ฐ˜ํ™˜
};

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (Arrow Function) ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธ
const add2 = (a, b) => {
  return a + b;  // ๋‘ ๊ฐ’์„ ๋”ํ•ด์„œ ๋ฐ˜ํ™˜
};

// ๋” ๊ฐ„๊ฒฐํ•œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
const add3 = (a, b) => a + b;  // ์ค‘๊ด„ํ˜ธ์™€ return ์ƒ๋žต ๊ฐ€๋Šฅ

// ์ œ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜ (a๋ฅผ ์ œ๊ณฑ)
const power = (a) => a ** 2;  // a์˜ ์ œ๊ณฑ๊ฐ’ ๋ฐ˜ํ™˜
const power2 = (a) => a ** 2; // ๋™์ผํ•˜๊ฒŒ a์˜ ์ œ๊ณฑ๊ฐ’ ๋ฐ˜ํ™˜

// ์ฝ˜์†”์— "YEEEEE" ์ถœ๋ ฅ
const shout = () => console.log("YEEEEE");

// ์ž˜๋ชป๋œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋ฌธ๋ฒ• (ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†์–ด์„œ ์—๋Ÿฌ ๋ฐœ์ƒ)
const shout = => console.log("YEEEEE");  // ์˜ค๋ฅ˜: ํ•จ์ˆ˜ ์ด๋ฆ„์ด ํ•„์š”

// ๊ฐ์ฒด ๋ฐ˜ํ™˜์„ ์œ„ํ•œ ํ•จ์ˆ˜ (์ž˜๋ชป๋œ ๋ฐ˜ํ™˜ ๋ฌธ๋ฒ•)
const obj = () => {
  a: 10;  // ์ด๊ฑด ๋™์ž‘ํ•˜์ง€ ์•Š์•„์š”. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด `return`์ด ํ•„์š”ํ•ด์š”.
};

// ๊ฐ์ฒด ๋ฐ˜ํ™˜์„ ์œ„ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•
const obj2 = () => ({
  a: 10,  // ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋ฐ”๋กœ ๋ฐ˜ํ™˜
});

console.log(obj());  // undefined ๋ฐ˜ํ™˜ (์ž˜๋ชป๋œ ๊ฐ์ฒด ๋ฐ˜ํ™˜)
console.log(obj2()); // { a: 10 } ๋ฐ˜ํ™˜

// ๊ณ ์ฐจ ํ•จ์ˆ˜ ์˜ˆ์‹œ

// map: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ›„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜

const n1 = [1, 2, 3];
const n2 = n1; // n2๋Š” n1์„ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜ (์–•์€ ๋ณต์‚ฌ)
console.log(n1); // [1, 2, 3]
console.log(n2); // [1, 2, 3]
const n3 = n1.map(function (num) {
  return num * 3;  // n1์˜ ๊ฐ ๊ฐ’์— 3์„ ๊ณฑํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ
});
console.log(n3);  // [3, 6, 9] ์ถœ๋ ฅ

// n1์€ n2์™€ ๊ฐ™์€ ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝ๋จ
for (let index = 0; index < n2.length; index++) {
  n2[index] *= 3;  // n2์˜ ๊ฐ ๊ฐ’์— 3์„ ๊ณฑํ•ด ๋ณ€๊ฒฝ
}
// map์„ ์•ˆ ์“ฐ๋ฉด for ๋ฅผ ์จ์•ผ ํ•œ๋‹ค. ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•˜๋ ค๊ณ  n1์˜ map์„ ํ•ด์„œ function (num) ์ด๋ผ๋Š” ์ž„์˜ ์• ํ•œํ…Œ ๋„ฃ๋Š”๋‹ค.


console.log(n1);  // n2์™€ n1์€ ๊ฐ™์€ ๋ฐฐ์—ด์ด๋ผ [3, 6, 9]๋กœ ๋ณ€๊ฒฝ๋จ
console.log(n2);  // [3, 6, 9] (n1๊ณผ ๋™์ผ)
console.log(n3);  // [3, 6, 9] (์ƒˆ๋กœ์šด ๋ฐฐ์—ด)

console.log(Object.is(n1, n2)); // true (n1๊ณผ n2๋Š” ๊ฐ™์€ ๋ฐฐ์—ด)
console.log(Object.is(n1, n3)); // false (n1๊ณผ n3๋Š” ๋‹ค๋ฅธ ๋ฐฐ์—ด)

// filter: ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’๋งŒ ๋‚จ๊ธฐ๋Š” ํ•จ์ˆ˜
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const odd = numbers.filter((v) => v % 2 == 1);  // ํ™€์ˆ˜๋งŒ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ
console.log(odd);  // [1, 3, 5, 7, 9]

const even = numbers.filter((v) => v % 2 == 0);  // ์ง์ˆ˜๋งŒ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ
console.log(even);  // [2, 4, 6, 8, 10]

// reduce: ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ํ•จ์ˆ˜ (๋ˆ„์  ํ•ฉ์‚ฐ)
console.log(numbers.reduce((acc, cur) => acc + cur));  // ํ•ฉ: 55

console.log(
  numbers.reduce((acc, cur) => {
    console.log(acc, cur);  // acc: ๋ˆ„์ ๋œ ๊ฐ’, cur: ํ˜„์žฌ ๊ฐ’
    return acc + cur;  // ๊ฐ ๊ฐ’์„ ๋”ํ•ด๊ฐ€๋ฉฐ ๋ˆ„์ 
  }, 0)
);

console.log(
  numbers.reduce((acc, cur) => {
    console.log(acc, cur);  // acc: ๋ˆ„์ ๋œ ๊ฐ’, cur: ํ˜„์žฌ ๊ฐ’
    return acc * cur;  // ๊ฐ ๊ฐ’์„ ๊ณฑํ•ด๊ฐ€๋ฉฐ ๋ˆ„์ 
  }, 1)
);

// forEach: ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ž‘์—…์„ ์‹คํ–‰ (๊ฐ’ ๋ฐ˜ํ™˜ X)
numbers.forEach((el) => console.log(el));  // ๊ฐ ๊ฐ’์„ ์ฝ˜์†”์— ์ถœ๋ ฅ

// ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น: ๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด์—์„œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ถ”์ถœ

// ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
const arr = ["a", "b", "c", "d"];
const [a, b, c, d] = arr;  // ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ฐ๊ฐ ๋ณ€์ˆ˜์— ํ• ๋‹น
console.log(a, b, c, d);  // a b c d

const [e, f, g] = arr;  // ๋ฐฐ์—ด์—์„œ ์ฒ˜์Œ 3๊ฐœ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ด
console.log(e, f, g);  // a b c

const [aa, bb, cc, dd, ee] = arr;  // ๋ฐฐ์—ด์— ๊ฐ’์ด ์—†์œผ๋ฉด undefined๋กœ ํ• ๋‹น
console.log(aa, bb, cc, dd, ee);  // "a b c d undefined"

const [ff, ...gg] = arr;  // ์ฒซ ๊ฐ’์€ ff์—, ๋‚˜๋จธ์ง€๋Š” gg์— ๋ฐฐ์—ด๋กœ ํ• ๋‹น
console.log(ff, gg);  // "a" ["b", "c", "d"]

// ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
const ob = { a: "a", b: "bb", c: "ccc" };
const { a1, b1, c1 = "๊ธฐ๋ณธ๊ฐ’" } = ob;  // ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Œ
console.log(a1, b1, c1);  // undefined undefined "๊ธฐ๋ณธ๊ฐ’"

const { a: a2, b: b2, c: c2 } = ob;  // ํ‚ค ๊ฐ’์„ ์ƒˆ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ• ๋‹น
console.log(a2, b2, c2);  // "a" "bb" "ccc"

// ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž: ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ๋•Œ ์‚ฌ์šฉ

// ๋ฐฐ์—ด ์Šคํ”„๋ ˆ๋“œ
const x = [1, 2, 3];
const y = [x];  // y๋Š” x๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด (์–•์€ ๋ณต์‚ฌ)
console.log(x, y);  // [1, 2, 3] [[1, 2, 3]]

x[0] = 100;  // x์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ณ€๊ฒฝ
console.log(x, y);  // x: [100, 2, 3], y: [[100, 2, 3]]

const z = [...x];  // x ๋ฐฐ์—ด์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌ
console.log(x, z);  // x: [100, 2, 3], z: [100, 2, 3]

console.log(Object.is(x, z));  // false (x์™€ z๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด)

x[1] = 1000;  // x์˜ ๋‘ ๋ฒˆ์งธ ๊ฐ’์„ ๋ณ€๊ฒฝ
console.log(x, z);  // x: [100, 1000, 3], z: [100, 2, 3]

const y2 = [[...x]];  // x์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•œ ๋ฐฐ์—ด์„ ํฌํ•จํ•œ ๋ฐฐ์—ด ์ƒ์„ฑ
x[0] = 222;  // x์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’ ๋ณ€๊ฒฝ
console.log(x, y, y2);  // x: [222, 1000, 3], y: [[222, 1000, 3]], y2: [[222, 1000, 3]]

// ๊ฐ์ฒด ๋ณต์‚ฌ
const man = { name: "john", age: 30 };
const man2 = man;  // man2๋Š” man๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
man2.name = "james";  // man2์˜ name์„ "james"๋กœ ๋ณ€๊ฒฝ
console.log(man, man2);  // { name: "james", age: 30 } { name: "james", age: 30 }

const man3 = { ...man };  // man ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด
console.log(man, man2, man3);  // { name: "james", age: 30 }, { name: "james", age: 30 }, { name: "james", age: 30 }

console.log(Object.is(man, man3));  // false (man๊ณผ man3๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด)

man3.name = "dave";  // man3์˜ name์„ "dave"๋กœ ๋ณ€๊ฒฝ
console.log(man, man2, man3);  // { name: "james", age: 30 }, { name: "james", age: 30 }, { name: "dave", age: 30 }

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// ํ™€์ˆ˜๋งŒ ๊ณจ๋ผ๋‚ด๊ธฐ
const odd = numbers.filter((v) => v % 2 == 1);
console.log(odd);  // [1, 3, 5, 7, 9]

// ์ง์ˆ˜๋งŒ ๊ณจ๋ผ๋‚ด๊ธฐ
const even = numbers.filter((v) => v % 2 == 0);
console.log(even);  // [2, 4, 6, 8, 10]

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// filter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™€์ˆ˜๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ
const odd = numbers.filter(function(v) {
  return v % 2 === 1;  // v๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๋งŒ true๋กœ ๋ฐ˜ํ™˜
});

console.log(odd);  // [1, 3, 5, 7, 9]

์–˜๋ฅผ ์ค„์ด๋ฉด ์œ„๋ž‘ ๊ฐ™์•„์ง.

 

  1. filter๋ผ๊ณ  ํ•˜๋Š” ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ์ด์ œ ํ•จ์ˆ˜๋ผ๋Š” ๊ฑธ ๊ฐ’์œผ๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”
2. ๋ฐ›์•„์˜จ ํ•จ์ˆ˜๋Š” ํŠน์ •ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š”๋ฐ filter์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ๊ฐ์˜ ์›์†Œ๋ฅผ ๊ทธ ํ•จ์ˆ˜์— ๋„ฃ์–ด๋ด์„œ true๊ฐ€ ๋‚˜์˜ค๋Š”์ง€๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค
 
 

๊ทธ๋Ÿฌ๋‹ˆ๊ฐ€ ๋‚ด๊ฐ€ 

1. filter ํ•จ์ˆ˜

๋จผ์ €, filter ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋“ค๋งŒ ๊ณจ๋ผ๋‚ด๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ numbers ๋ฐฐ์—ด์€ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]์ด๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ํ™€์ˆ˜๋งŒ ๊ณจ๋ผ๋‚ด๋Š” ๊ฒƒ์ด์—์š”.

2. (v) =>

(v) =>๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(arrow function)๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, JavaScript์—์„œ ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.

  • **(v)**๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, v๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ›์•„์˜ค๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, numbers ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ 1, ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ 2, ์„ธ ๋ฒˆ์งธ ๊ฐ’์€ 3 ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋ž˜์„œ (v)๋Š” ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฐ›์„ ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๊ฑฐ์˜ˆ์š”.
  • **=>**๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ **"ํ•จ์ˆ˜"**๊ฐ€ ์‹œ์ž‘๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
    • ์ด ํ™”์‚ดํ‘œ ๋’ค์—๋Š” ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

3. (v) => v % 2 == 1

์ด ํ•จ์ˆ˜์˜ ์—ญํ• ์€ ๊ฐ๊ฐ์˜ v ๊ฐ’์ด ํ™€์ˆ˜์ธ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • v % 2 == 1์€ ๋‚˜๋จธ์ง€๊ฐ€ 1์ด๋ฉด ํ™€์ˆ˜๋ผ๋Š” ๋œป์ด์—์š”.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, v = 1์ผ ๋•Œ 1 % 2 == 1์ด ์„ฑ๋ฆฝํ•˜์ฃ . ์™œ๋ƒํ•˜๋ฉด 1์„ 2๋กœ ๋‚˜๋ˆ„๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 1์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    • ๋ฐ˜๋ฉด์—, v = 2์ผ ๋•Œ 2 % 2 == 0์ด๊ธฐ ๋•Œ๋ฌธ์— false๊ฐ€ ๋˜๊ฒ ์ฃ .

4. ์ตœ์ข… ์„ค๋ช…

numbers.filter((v) => v % 2 == 1)์˜ ๋™์ž‘์€ ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

  1. numbers ๋ฐฐ์—ด์—์„œ ํ•˜๋‚˜์”ฉ ๊ฐ’์„ ๊บผ๋‚ด์™€์„œ v์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
  2. ๊ฐ v ๊ฐ’์— ๋Œ€ํ•ด (v) => v % 2 == 1 ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ™€์ˆ˜์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™€์ˆ˜์ธ ๊ฐ’๋“ค๋งŒ odd ๋ฐฐ์—ด์— ๋ชจ์€ ํ›„, ๊ทธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ

  • ์–•์€ ๋ณต์‚ฌ (Shallow Copy): ์ฐธ์กฐ๋ฅผ ๋ณต์‚ฌ (์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌ). ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์›๋ณธ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณต์‚ฌ๋ณธ์—๋„ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.
  • ๊นŠ์€ ๋ณต์‚ฌ (Deep Copy): ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ๋ณต์‚ฌ. ์›๋ณธ๊ณผ ๋ณต์‚ฌ๋ณธ์€ ๋…๋ฆฝ์ ์ด์–ด์„œ ์›๋ณธ์„ ์ˆ˜์ •ํ•ด๋„ ๋ณต์‚ฌ๋ณธ์— ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

์–•์€ ๋ณต์‚ฌ

const x = [1, 2, 3];
const y = [x];  // y๋Š” x๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด (์–•์€ ๋ณต์‚ฌ)
console.log(x, y);  // [1, 2, 3] [[1, 2, 3]]

x[0] = 100;  // x์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ณ€๊ฒฝ
console.log(x, y);  // x: [100, 2, 3], y: [[100, 2, 3]]

 

  • ์–•์€ ๋ณต์‚ฌ (Shallow Copy): y = [x]์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ x ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์—, x ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ๋˜๋ฉด y๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • ๊นŠ์€ ๋ณต์‚ฌ (Deep Copy): z = [...x]์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ x ๋ฐฐ์—ด์˜ ๊ฐ’๋งŒ ์ƒˆ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ x์™€ z๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ

const z = [...x];  // x ๋ฐฐ์—ด์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌ
console.log(x, z);  // x: [100, 2, 3], z: [100, 2, 3]

console.log(Object.is(x, z));  // false (x์™€ z๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด)

x[1] = 1000;  // x์˜ ๋‘ ๋ฒˆ์งธ ๊ฐ’์„ ๋ณ€๊ฒฝ
console.log(x, z);  // x: [100, 1000, 3], z: [100, 2, 3]

 

 x[1] = 1000์œผ๋กœ x ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด, z ๋ฐฐ์—ด์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. x์™€ z๋Š” ๋…๋ฆฝ์ ์ธ ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

 

 

 

 

 

1. filter: ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ

  • ๋ฐฐ์—ด์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’๋งŒ ๋‚จ๊ธฐ๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
  • ์˜ˆ: ํ™€์ˆ˜๋งŒ ๋ฝ‘๊ธฐ, ์ง์ˆ˜๋งŒ ๋ฝ‘๊ธฐ
javascript
๋ณต์‚ฌํŽธ์ง‘
const odd = numbers.filter((v) => v % 2 == 1); // ํ™€์ˆ˜๋งŒ const even = numbers.filter((v) => v % 2 == 0); // ์ง์ˆ˜๋งŒ

2. reduce: ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œํ•˜๊ธฐ (๋ˆ„์ )

  • ๋ฐฐ์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”. (ํ•ฉ์‚ฐ, ๊ณฑ์…ˆ ๋“ฑ)
  • ์˜ˆ: ๋ชจ๋“  ์ˆซ์ž ๋”ํ•˜๊ธฐ
javascript
๋ณต์‚ฌํŽธ์ง‘
const sum = numbers.reduce((acc, cur) => acc + cur); // ํ•ฉ์‚ฐ

3. forEach: ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
  • ๊ฐ’์€ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์š”.
javascript
๋ณต์‚ฌํŽธ์ง‘
numbers.forEach((el) => console.log(el)); // ๊ฐ’ ์ถœ๋ ฅ

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

  • ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ๊ฐ’์„ ์‰ฝ๊ฒŒ ๊บผ๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.
  • ์˜ˆ: ๋ฐฐ์—ด์—์„œ ๊ฐ’ ์ถ”์ถœ, ๊ฐ์ฒด์—์„œ ๊ฐ’ ์ถ”์ถœ
javascript
๋ณต์‚ฌํŽธ์ง‘
const [a, b] = ["a", "b"]; const { name, age } = { name: "John", age: 30 };

5. ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž (...)

  • ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ํ•ฉ์น˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด์š”.
  • ์˜ˆ: ๋ฐฐ์—ด ๋ณต์‚ฌ, ๊ฐ์ฒด ๋ณต์‚ฌ
javascript
๋ณต์‚ฌํŽธ์ง‘
const newArr = [...oldArr]; // ๋ฐฐ์—ด ๋ณต์‚ฌ const newObj = {...oldObj}; // ๊ฐ์ฒด ๋ณต์‚ฌ
 

 


1. filter: ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ

  • filter๋Š” ๋ฐฐ์—ด์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋“ค๋งŒ ๊ณจ๋ผ๋‚ด๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์—์„œ ํ™€์ˆ˜๋งŒ ๋ฝ‘๊ณ  ์‹ถ์œผ๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์š”.
javascript
๋ณต์‚ฌํŽธ์ง‘
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const odd = numbers.filter((v) => v % 2 == 1); // ํ™€์ˆ˜๋งŒ ๋ฝ‘๊ธฐ console.log(odd); // [1, 3, 5, 7, 9]
  • filter์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋“ค๋งŒ newArray์— ์ €์žฅ๋ผ์š”.
  • ์ด ์˜ˆ์ œ์—์„œ๋Š” ํ™€์ˆ˜๋งŒ ๋‚จ๊ฒŒ ๋ผ์š”.

2. reduce: ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œํ•˜๊ธฐ (๋ˆ„์ )

  • reduce๋Š” ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ํ•ฉ์น˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ๋”ํ•˜๊ฑฐ๋‚˜ ๊ณฑํ•˜๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ: ๋ฐฐ์—ด์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

javascript
๋ณต์‚ฌํŽธ์ง‘
const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce((acc, cur) => acc + cur); 
// ๋ˆ„์ ํ•ฉ ๊ตฌํ•˜๊ธฐ console.log(sum); // 15
const snacks = [1, 2, 3, 4, 5];  // ๊ฐ ๊ฐ•์•„์ง€์—๊ฒŒ ์ฃผ๋Š” ๊ฐ„์‹์˜ ์–‘
const totalSnacks = snacks.reduce(function(acc, snack) {  // ์ต๋ช… ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝ
  return acc + snack;  // ๋ˆ„์ ๋œ ๊ฐ’(acc)๊ณผ ํ˜„์žฌ ๊ฐ’(snack)์„ ๋”ํ•ด์ค€๋‹ค.
}, 0);  // ์ดˆ๊ธฐ๊ฐ’์€ 0
console.log(totalSnacks);  // 15
  • acc๋Š” ๋ˆ„์ ๋œ ๊ฐ’(์ดˆ๊ธฐ๊ฐ’: 0), cur๋Š” ํ˜„์žฌ ๊ฐ’์ด์˜ˆ์š”.
  • ์ฒ˜์Œ์—” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, ๋ฐฐ์—ด์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ๋ฒˆ์”ฉ ๋Œ๋ฉฐ ๊ฐ’๋“ค์„ ๋”ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.

์˜ˆ: ๋ฐฐ์—ด์˜ ๊ฐ’ ๋ชจ๋‘ ๊ณฑํ•˜๊ธฐ

javascript
๋ณต์‚ฌํŽธ์ง‘
const product = numbers.reduce((acc, cur) => acc * cur, 1); // ๋ฐฐ์—ด ๊ฐ’ ๊ณฑํ•˜๊ธฐ console.log(product); // 120
  • reduce์—์„œ ๋‘ ๋ฒˆ์งธ ์ธ์ž 1์€ ์ดˆ๊ธฐ๊ฐ’์ด์—์š”. ๊ณฑ์…ˆ์„ ์‹œ์ž‘ํ•  ๋•Œ 1๋กœ ์‹œ์ž‘ํ•ด์•ผ ๊ณฑ์…ˆ์ด ์ œ๋Œ€๋กœ ๋˜์ฃ .

3. forEach: ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด ์ž‘์—… ์‹คํ–‰

  • forEach๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ๋ญ”๊ฐ€๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
  • ๋ฐ˜ํ™˜๊ฐ’์€ ์—†์–ด์š”. ๋‹จ์ง€ ๊ฐ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.
javascript
๋ณต์‚ฌํŽธ์ง‘
numbers.forEach((el) => console.log(el)); // ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ์ถœ๋ ฅ
  • ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ, ๋ฐฐ์—ด์˜ ๊ฐ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์–ด์š”.

4. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น (Destructuring Assignment)

  • ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ๊ฐ’๋“ค์„ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.

์˜ˆ: ๋ฐฐ์—ด์—์„œ ๊ฐ’ ๊บผ๋‚ด๊ธฐ

javascript
๋ณต์‚ฌํŽธ์ง‘
const arr = ["a", "b", "c", "d"]; const [a, b, c, d] = arr; // ๋ฐฐ์—ด์—์„œ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ console.log(a, b, c, d); // "a b c d"
  • a, b, c, d๋Š” ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ ๊ฐ’์„ ๊ฐ๊ฐ ๋ฐ›๊ฒŒ ๋ผ์š”.

์˜ˆ: ๊ฐ์ฒด์—์„œ ๊ฐ’ ๊บผ๋‚ด๊ธฐ

const obj = { name: "John", age: 30 }; const { name, age } = obj; 
// ๊ฐ์ฒด์—์„œ ๊ฐ’์„ ๊บผ๋‚ด๊ธฐ console.log(name, age); // "John 30"
  • ๊ฐ์ฒด์˜ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋ฐ”๋กœ ํ• ๋‹นํ•ด์š”.

์˜ˆ: ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

  • ๊ฐ’์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์–ด์š”.
 
const { a = "๊ธฐ๋ณธ๊ฐ’" } = {}; // a๊ฐ€ ์—†์œผ๋ฉด "๊ธฐ๋ณธ๊ฐ’" ์‚ฌ์šฉ console.log(a); // "๊ธฐ๋ณธ๊ฐ’"

5. ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž (...)

  • ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”.

์˜ˆ: ๋ฐฐ์—ด ๋ณต์‚ฌ

const arr1 = [1, 2, 3]; const arr2 = [...arr1]; 
// arr1์„ ๋ณต์‚ฌํ•ด์„œ arr2์— ๋„ฃ๊ธฐ arr1[0] = 100; console.log(arr1, arr2); 
// arr1: [100, 2, 3], arr2: [1, 2, 3]
  • ...๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฑฐ์˜ˆ์š”. ๋ณต์‚ฌํ•œ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•ด๋„ ์›๋ณธ ๋ฐฐ์—ด์€ ์˜ํ–ฅ์„ ์•ˆ ๋ฐ›์•„์š”.

์˜ˆ: ๊ฐ์ฒด ๋ณต์‚ฌ

const person = { name: "John", age: 30 }; const copyPerson = { ...person }; 
// person ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌ console.log(copyPerson); // { name: "John", age: 30 }
 
  • ๊ฐ์ฒด๋„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์–ด์š”.