// ๊ฐ์ฒด 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() ๋ฌธ์ ๋ต๋ณ โ (์ค๋ฅ ์์!)
โ ๋ฌธ์ ์
- slice(0, 2)์ ํ๋ฉด "Python", "JavaScript"๊ฐ ๋์ด!
- "JavaScript"์ "C++"๋ง ๊ฐ์ ธ์ค๋ ค๋ฉด?
๐ slice(1, 3)์ด ์ ๋ต! โjs๋ณต์ฌํธ์งconst result = languages.slice(1, 3); console.log(result); // ["JavaScript", "C++"]
๐ 2๋ฒ length ๋ฌธ์ ๋ต๋ณ โ (์ค๋ฅ ์์!)
๐ก ์ค๋ต!
โ
fruits.length๋ 5๊ฐ ๋์!
์๋ํ๋ฉด ๋ฐฐ์ด์ ๊ธธ์ด๋ 0๋ถํฐ ์์ํ๋ ๊ฒ ์๋๋ผ, ์์์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฑฐ์ผ!
- "๐", "๐", "๐", "๐", "๐ฅญ" → ์ด 5๊ฐ๋๊น 5๊ฐ ๋์ด!
๐ 3๋ฒ concat() ๋ฌธ์ ๋ต๋ณ โ (์ค๋ฅ ์์!)
โ ๋ฌธ์ ์
๐ concat()์ ๋ฐฐ์ด์์ ์ฌ์ฉํ๋ ๋ฉ์๋์ผ!
๐ concat(arr1, arr2); โ ์ด๋ ๊ฒ ์ฐ๋ฉด ์ ๋๊ณ , **arr1.concat(arr2);**๋ผ๊ณ ์จ์ผ ํด!
โ ์ ๋ต
๐ก concat()์ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋ค!
๐ 4๋ฒ pop() ๋ฌธ์ ๋ต๋ณ โ (์ค๋ฅ ์์!)
โ ์ฒซ ๋ฒ์งธ ์ถ๋ ฅ
โ ๋ ๋ฒ์งธ ์ถ๋ ฅ (์ค๋ฅ ์์!)
- pop()์ ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํ๋ฉด์ ๋ฐํํ๋ ํจ์์ผ!
- ์ฆ, numbers ๋ฐฐ์ด์์ 40์ด ์ฌ๋ผ์ง!
โ ์ ๋ต
๐ pop()์ ์๋ณธ ๋ฐฐ์ด์ ๋ฐ๊พผ๋ค! (40์ด ์ฌ๋ผ์ง!)
๐ 5๋ฒ for ๋ฐ๋ณต๋ฌธ ๋ฌธ์ โ ์ ๋ต!
โ
์ ๋ต: 3๋ฒ ์ถ๋ ฅ๋จ!
โ pets.length๊ฐ 3์ด๋๊น i = 0, 1, 2๊น์ง๋ง ์คํ๋จ!
โ i = 3์ด ๋๋ฉด i < pets.length ์กฐ๊ฑด์ด ๊ฑฐ์ง์ด๋ผ ๋ฉ์ถค!
์ถ๋ ฅ
๐ 6๋ฒ for...of ์ค๋ช ๊ณผ ๋ต โ
๐ก for...of๋?
๐ ๋ฐฐ์ด์ ์์(๊ฐ)๋ง ๊ฐ์ ธ์ค๋ ๋ฐ๋ณต๋ฌธ!
๐ for (const ๋ณ์ of ๋ฐฐ์ด) {}
๐ color์ ๋ฐฐ์ด์ ๊ฐ ํ๋์ฉ ๋ค์ด๊ฐ!
๐ ์ถ๋ ฅ ๊ฒฐ๊ณผ
โ ์ ๋ฆฌ
- for...of๋ ๋ฐฐ์ด์ ๊ฐ๋ง ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ!
- for๋ฌธ๋ณด๋ค ์ฝ๋๊ฐ ์งง๊ณ ๊ฐ๋ ์ฑ์ด ์ข์!
๐ 7๋ฒ for...in ์ค๋ช ๊ณผ ๋ต โ
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์๋ ๊ฐ์ฒด์ ์์ฑ ์ด๋ฆ(ํค)์ด ๋ค์ด๊ฐ!
๐ ์ถ๋ ฅ ๊ฒฐ๊ณผ
โ ์ ๋ฆฌ
- 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]
์๋ฅผ ์ค์ด๋ฉด ์๋ ๊ฐ์์ง.
- filter๋ผ๊ณ ํ๋ ๊ณ ์ฐจํจ์๋ ์ด์ ํจ์๋ผ๋ ๊ฑธ ๊ฐ์ผ๋ก ๋ฐ์์ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ํด์ค์
๊ทธ๋ฌ๋๊ฐ ๋ด๊ฐ
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)์ ๋์์ ์ด๋ ๊ฒ ๋ฉ๋๋ค:
- numbers ๋ฐฐ์ด์์ ํ๋์ฉ ๊ฐ์ ๊บผ๋ด์์ v์ ๋ฃ์ต๋๋ค.
- ๊ฐ v ๊ฐ์ ๋ํด (v) => v % 2 == 1 ํจ์๋ฅผ ์คํํ์ฌ ํ์์ธ์ง ํ์ธํฉ๋๋ค.
- ํ์์ธ ๊ฐ๋ค๋ง 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: ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ๋ฝ์๋ด๊ธฐ
- ๋ฐฐ์ด์์ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ๋จ๊ธฐ๋ ํจ์์์.
- ์: ํ์๋ง ๋ฝ๊ธฐ, ์ง์๋ง ๋ฝ๊ธฐ
const odd = numbers.filter((v) => v % 2 == 1); // ํ์๋ง const even = numbers.filter((v) => v % 2 == 0); // ์ง์๋ง
2. reduce: ๋ฐฐ์ด์ ํ๋์ ๊ฐ์ผ๋ก ์ถ์ํ๊ธฐ (๋์ )
- ๋ฐฐ์ด์ ํ๋๋ก ํฉ์น๋ ํจ์์์. (ํฉ์ฐ, ๊ณฑ์ ๋ฑ)
- ์: ๋ชจ๋ ์ซ์ ๋ํ๊ธฐ
const sum = numbers.reduce((acc, cur) => acc + cur); // ํฉ์ฐ
3. forEach: ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ฐ๋ณต ์ฒ๋ฆฌํ๊ธฐ
- ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์์ ์ ์คํํ๋ ํจ์์์.
- ๊ฐ์ ๋ฐํํ์ง ์์์.
4. ๊ตฌ์กฐ ๋ถํด ํ ๋น
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์์ ๊ฐ์ ์ฝ๊ฒ ๊บผ๋ด๋ ๋ฐฉ๋ฒ์ด์์.
- ์: ๋ฐฐ์ด์์ ๊ฐ ์ถ์ถ, ๊ฐ์ฒด์์ ๊ฐ ์ถ์ถ
5. ์คํ๋ ๋ ์ฐ์ฐ์ (...)
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ณต์ฌํ๊ฑฐ๋ ํฉ์น๋ ๋ฐ ์ฌ์ฉํด์.
- ์: ๋ฐฐ์ด ๋ณต์ฌ, ๊ฐ์ฒด ๋ณต์ฌ
1. filter: ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ๋ฝ์๋ด๊ธฐ
- filter๋ ๋ฐฐ์ด์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ๋ค๋ง ๊ณจ๋ผ๋ด๋ ํจ์์์.
- ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์์ ํ์๋ง ๋ฝ๊ณ ์ถ์ผ๋ฉด ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํด์.
- filter์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ๋ค๋ง newArray์ ์ ์ฅ๋ผ์.
- ์ด ์์ ์์๋ ํ์๋ง ๋จ๊ฒ ๋ผ์.
2. reduce: ๋ฐฐ์ด์ ํ๋์ ๊ฐ์ผ๋ก ์ถ์ํ๊ธฐ (๋์ )
- reduce๋ ๋ฐฐ์ด์ ํ๋์ ๊ฐ์ผ๋ก ํฉ์น๊ฑฐ๋ ์ถ์ํ๋ ํจ์์์. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ ๋ํ๊ฑฐ๋ ๊ณฑํ๋ ์์ผ๋ก ์ฌ์ฉํ ์ ์์ด์.
์: ๋ฐฐ์ด์ ํฉ ๊ตฌํ๊ธฐ
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๋ถํฐ ์์ํด์, ๋ฐฐ์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ๋ฒ์ฉ ๋๋ฉฐ ๊ฐ๋ค์ ๋ํ๋ ๋ฐฉ์์ด์์.
์: ๋ฐฐ์ด์ ๊ฐ ๋ชจ๋ ๊ณฑํ๊ธฐ
- reduce์์ ๋ ๋ฒ์งธ ์ธ์ 1์ ์ด๊ธฐ๊ฐ์ด์์. ๊ณฑ์ ์ ์์ํ ๋ 1๋ก ์์ํด์ผ ๊ณฑ์ ์ด ์ ๋๋ก ๋์ฃ .
3. forEach: ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ๋ํด ์์ ์คํ
- forEach๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ๋ญ๊ฐ๋ฅผ ์คํํ ๋ ์ฌ์ฉํ๋ ํจ์์์.
- ๋ฐํ๊ฐ์ ์์ด์. ๋จ์ง ๊ฐ ์์๋ฅผ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๊ฑฐ์์.
- ์ ์ฝ๋์ฒ๋ผ, ๋ฐฐ์ด์ ๊ฐ ๊ฐ์ ํ๋์ฉ ์ถ๋ ฅํ ์ ์์ด์.
4. ๊ตฌ์กฐ ๋ถํด ํ ๋น (Destructuring Assignment)
- ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์์ ๊ฐ๋ค์ ์ฝ๊ฒ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ด์์.
์: ๋ฐฐ์ด์์ ๊ฐ ๊บผ๋ด๊ธฐ
- 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 }
- ๊ฐ์ฒด๋ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณต์ฌํ ์ ์์ด์.