0. ๊ธฐ๋ณธํ
function sum(a, b) { // ์ฌ๊ธฐ๋ ์ธ์๋ฅผ ๋ฐ๋ ๋งค๊ฐ์ฒด ๋งค๊ฐ๋ณ์
return a + b;
}
console.log(sum(1, 2)); // ์ฌ๊ธฐ๊ฐ ๋ค์ด์จ ๊ฐ ์ธ์
์ธ์, ๋งค๊ฐ๋ณ์ ๋ ์ฉ์ด๋ฅผ ํท๊ฐ๋ ธ์๋๋ฐ,
์ธ์๋ ํจ์๊ฐ ํธ์ถ๋์ด ์ค์ ๋ค์ด์ค๋ ๊ฐ์ ๋ปํ๊ณ ,
๋งค๊ฐ๋ณ์๋ ํจ์ ์ ์ธ๋ฌธ์ ์ ํ๋ ์ธ์๋ฅผ ๋ฐ๋ ๋งค๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.
1. ๊ธฐ๋ณธ๊ฐ
์์ ํจ์์์ ๋ง์ฝ์ ์ฌ์ฉ์๊ฐ sum ํจ์๋ฅผ ํธ์ถํ๊ณ ์ธ์๋ฅผ ํ๋๋ง ์ด ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋ ๊น?
console.log(sum(7)); // 7๊ณผ undefined๋ฅผ ๋ ํด์ not a number
๋ ๋ฒ์งธ ์ธ์๋ก๋ undefined๊ฐ ๋ค์ด๊ฐ์ 7 + undefined๊ฐ ๋์ด NaN์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋งค๊ฐ๋ณ์์ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ค. '๋งค๊ฐ๋ณ์ = ๊ธฐ๋ณธ๊ฐ'์ ํํ๋ฅผ ํตํด ํน์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ด ๋ค์ด์ค์ง ์๋๋ค๋ฉด ๋์ ์ฐ์ผ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์๋ค.
function sum(a, b = 1) {
return a + b;
}
console.log(sum(1,2)); // ์ด๊ฑด ์ ์์ ์ผ๋ก 3์ด ์ถ๋ ฅ๋จ.
console.log(sum(7)); // output : 8
2. ๊ตฌ์กฐ๋ถํด ํ ๋น
(1) ๊ฐ์ฒด
const user = {
name: "heropy",
age: 85,
email: "dfmldfmkl",
};
function getName1(user) {
return user.name;
}
function getName2(user) {
const { name } = user;
return name;
}
function getName3({ name }) {
return name;
}
function getEmail({ email = "์ด๋ฉ์ผ์ด ์์ต๋๋ค." }) {
return email;
}
console.log(getName1(user));
console.log(getName2(user));
console.log(getName3(user));
console.log(getEmail(user));
getName1 ~3์ ๋ชจ๋ ๊ฐ์ ๋ก์ง์ด๋ค.
1๋ฒ์ ๋ ธ๋งํ๊ฒ ๊ฐ์ฒด ์ธ์๋ฅผ ๋ฐ์์ ํด๋น ์ธ์ ์ค name์ด๋ผ๋ ๋ฉค๋ฒ์ ์ ๊ทผํ๋ค.
2๋ฒ์ ๊ฐ์ฒด์ธ์๋ฅผ ๋ฐ์์ ๊ตฌ์กฐ ๋ถํด๋ฅผ ํตํด name์ด๋ key์ value๋ฅผ ๋ฝ์๋ด์ด ์ฌ์ฉํ๋ค.
3๋ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ธ ๋ด์ฉ์ธ๋ฐ,
์ด ์ฒ๋ผ ๋งค๊ฐ๋ณ์ ๊ณต๊ฐ์์ ๋ฐ๋ก ๊ตฌ์กฐ๋ถํด ํ ๋น์ ํ์ฌ ์ธ ์ ๊ฐ์๋ค.
4๋ฒ์ ๊ตฌ์กฐ๋ถํด ํ ๋น ๊ฐ์ฒด์์ ๋ฐฐ์ ๋ฏ์ด ๋ง์ฝ ํด๋น key๊ฐ ๊ฐ์ฒด์์ ์๋ค๋ฉด ํด๋น key์ value๋ก๋ ๋์ฒดํด์ ์ฐ์ผ ๋ด์ฉ์ ์ ์ด์ฃผ๋ ๋ฌธ๋ฒ์ด๋ค. ๋ง์ฝ email์ด๋ ๋ฉค๋ฒ๊ฐ ๊ฐ์ฒด์์ ์๋๋ฐ, email์ returnํ๋ฉด "์ด๋ฉ์ผ์ด ์์ต๋๋ค๊ฐ ๋์ฒด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค." ํ์ง๋ง ์์ user ๊ฐ์ฒด์๋ email ์ด๋ key๊ฐ ์์ด์ ํด๋น key์ value๊ฐ ์ถ๋ ฅ๋์๋ค.
(2) ๋ฐฐ์ด
// (2) ๋ฐฐ์ด
const fruits = ["Apple", "Banana", "Cherry"];
const number = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function getSecoendItem([, b]) {
return b;
}
console.log(getSecoendItem(fruits));
console.log(getSecoendItem(number));
๋ฐฐ์ด ๋ํ ๋งค๊ฐ ๋ณ์ ๋ถ๋ถ์์ ๋ฐ๋ก ๊ตฌ์กฐ๋ถํด๊ฐ ๊ฐ๋ฅํ๋ค. ์๋ค์ํผ ๋ฐฐ์ด ๊ตฌ์กฐ๋ถํด๋ ๊ฐ์ฒด๋ ๋ค๋ฅด๊ฒ ๋ณ์๊ฐ ์ฐ์ธ index๋ก์ ์์๋ฅผ ๊ตฌ๋ถํ๋ค. (๊ฐ์ฒด๋ ๋ณ์์ ์ด๋ฆ์ด key ์ด๋ฆ์ด๋ ๋์ผํด์ผ ํ๋ค. ๋ฐ๋ผ์ ํด๋น ๋ณ์ ์ด๋ฆ์ผ๋ก ๋์ํ๋ value ๊ฐ์ ์ฐพ์ ๋ฝ์๋ธ๋ค.)
์์ ์์์์๋ ๋ฌด์กฐ๊ฑด ๋ฐฐ์ด์ ๋๋ฒ์งธ ๊ฐ๋ง ๋ฝ์๋ด๋ ๊ตฌ์กฐ๋ถํด๋ฅผ ๋ณด์ฌ์คฌ๋ค.
3. ๋๋จธ์ง ๋งค๊ฐ๋ณ์
Java์์๋ ์ค๋ฒ๋ก๋ฉ์ ํตํด ๊ฐ์ ์ด๋ฆ์ ํจ์์ ๊ดํด์ ๋ค์ด์ค๋ ์ธ์์ ๊ฐฏ์๋ ํ์ ์ด ๋ค๋ฅผ ๋, ๋์ํ๋ ๋ก์ง์ ๋ค๋ฅด๊ฒ ํด์ค ์ ์์๋ค. ์ฆ ์ธ์์ ๊ฐฏ์๋ ํ์ ์ด ๋ค๋ฅด๋ฉด ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ค๋ณตํด์ ์ธ ์ ์์๋ ๊ฒ์ด๋ค.
JS์์ ๊ฐ์ ์ด๋ฆ์ ํจ์์ ๋ค์ด์ค๋ ์ธ์์ ๊ฐ์ด ์ ๊ฐ๊ฐ์ด๋ฉด ์ด๋ป๊ฒ ๋์ํ ๊น?
์ฌ๊ธฐ๋ ๊ตฌ์กฐ๋ถํด ํ ๋น๊ณผ ์ฐ๊ด๋๋ ๋ด์ฉ์ธ๋ฐ ...rest "์ ๊ฐ ์ฐ์ฐ์"๋ฅผ ์ฌ์ฉํ๋ค.
// (3) ๋๋จธ์ง ๋งค๊ฐ๋ณ์
function sum1(...rest) {
// ์ ๊ฐ ์ฐ์ฐ์๋ก ์ฐ์ฌ์ง ๋งค๊ฐ๋ณ์๋ ์ธ์๋ค์ ๋ฐ์์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ค.
console.log(rest);
}
console.log(sum1(1, 2));
console.log(sum1(1, 2, 3, 4));
console.log(sum1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
์ ๊ฐ ์ฐ์ฐ์๋ก ์ฐ์ธ ๋งค๊ฐ๋ณ์๋ ์ธ์๋ค์ ๋ฐ์์ ๋ฐฐ์ด๋ก์ ์ ์ฅํ๋ค. ๊ทธ๋์ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ฐฐ์ด ํํ๋ก ๋์ด ์๋ค.
undefined๋ ์ ๊ฒฝ์ฐ์ง ๋ง์. ์ฐ๋ฆฌ๊ฐ sum1์ด๋ ํจ์์ ๋ฐํ ๊ฐ์ ๋ฐ๋ก ์ง์ ํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ฒ ๋์ค๋ ๊ฒ์ด๋ค.
return ๊ฐ์ ๋ฐ๋ก ์ค์ ํด์ฃผ์ง ์์ผ๋ฉด ๋ฐํ ์ undefined๊ฐ ๋์ค๊ฒ ๋๋ค.
๋ง์ฝ ๋งค๊ฐ๋ณ์์ ์ ๊ฐ ์ฐ์ฐ์ ๋งค๊ฐ๋ณ์๊ฐ ํผ์ฌ๋์ด ์์ผ๋ฉด, ์ด๋ป๊ฒ ์ธ์๊ฐ ํ ๋น ๋ ๊น?
์ผ๋จ ์ฐจ๋ก๋๋ก ๋งค๊ฐ๋ณ์์๊ฒ ๊ฐ์ด ๋ค์ด๊ฐ๊ณ ๊ทธ ๋๋จธ์ง๋ฅผ ์ ๊ฐ ์ฐ์ฐ์๊ฐ ๊ฐ์ ธ๊ฐ์ ๋ฐฐ์ด๋ก์ ์ ์ฅํ๋ค.
function sum2(a, b, ...rest) {
console.log(rest);
console.log(arguments);
return rest.reduce(function (acc, cur) {
return acc + cur;
}, 0);
}
console.log(sum2(1, 2));
console.log(sum2(1, 2, 3, 4));
console.log(sum2(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
์ฒซ ๋ฒ์งธ ๊บผ์๋ 1,2๊ฐ ๋ชจ๋ a,b์ ๋ค ๋ค์ด๊ฐ๊ธฐ์ rest ์ฐ์ฐ์์๋ ์๋ฌด๊ฒ๋ ์ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋๋จธ์ง 2๊ฐ์ ์ถ๋ ฅ๋ a,b์๊ฒ ํ ๋น๋ ๊ฒ์ ๋น ์ง ๋ชจ์ต์ด๋ค.
์ด๋ ๊ฒ๋ ์ฌ์ฉํ ์ ์๋ค. ์ ๊ฐ ์ฐ์ฐ์ ๋งค๊ฐ๋ณ์๋ ๋ฌด์กฐ๊ฑด ๋งค๊ฐ๋ณ์๋ค์ ๋งจ ๋ง์ง๋ง์ ์์ด์ผ ํ๋ค.
**arguments์ ๋ํ์ฌ**
arguments๋ ๋ฐ๋ก ๊ธฐ์ ํ์ง ์์๋ ํด๋น ํจ์๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์ธ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์ด๋ค.
key๊ฐ์ด ์ธ๋ฑ์ค์ด๊ณ , value๋ก ์ธ์๋ค์ด ์ฐจ๋ก๋๋ก ๋ค์ด๊ฐ ํํ๋ก, ๋ฐฐ์ด ๋ฐ์ดํฐ์ ํํ๊ฐ ๋น์ทํ๋ค.
arguments ์ถ๋ ฅ ํํ๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๋ ๊ฒ์ด๋ค.
ํจ์ ๋ด์์๋ arguments๋ฅผ ๋ฐ๋ก ์ ์ธํ์ง ์์๋ ์ธ ์ ์๋ค.
4. ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ
๋ฐฐ์ด์ ๋ด์ฅํจ์ reduce์ ๋ํด์ ์๊ฒ ๋์๋ค.
reduce() ๋งค์๋๋ 4๊ฐ์ ์ธ์๋ฅผ ํ์๋ก ํ๋ ์์ call back ํจ์๋ฅผ ์คํํ๋ค. ํด๋น call back ํจ์๋ฅผ reducer๋ผ๊ณ ํ๋ค.
(call-back์ด๋, ์ด๋ค ์ฝ๋์ ์ธ์๋ก ๋ค์ด๊ฐ๋ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋งํ๋ค.)
reducer ํจ์๋ ๋ฐฐ์ด์ ์์ ์๋งํผ ๋ฐ๋ณต๋๋ฉฐ, ๋ฐฐ์ด์ ์์๋ค์ ์ํํ๋ค.
๋จผ์ ํจ์์ ์ฒซ๋ฒ์งธ ์ธ์ : acc๋ ๋์ ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ , ์ฒซ ๋ฒ์งธ ์คํ์ผ์ ์ด๊ธฐ๊ฐ, ๊ทธ ์ดํ๋ถํฐ๋ ์ด์ ์คํ์ ๋ฐํ๊ฐ์ ์ ์ฅํ๋ค.
๋ ๋ฒ์งธ ์ธ์, cur๋ current์ ์๋ฏธ๋ก ํ์ฌ ์ํ ์ค์ธ ์์๋ฅผ ์๋ฏธํ๋ค. ์ด๊ธฐ๊ฐ์ ๋ฐ๋ก ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด index: 1๋ถํฐ ์ํํ๋ค.(index: 0๋ฒ์ด ์ด๊ธฐ๊ฐ์ด ๋๋ฏ๋ก), ์ด๊ธฐ๊ฐ์ ๋ฐ๋ก ์ง์ ํ๋ฉด index: 0 ๋ถํฐ ์ํํ๋ค.
์ธ ๋ฒ์งธ๋ก ํจ์ ๋ค์ ์ ํ ์๋ ๊ฒ์ ์ด๊ธฐ๊ฐ์ด๋ค. ๋งจ ์ฒ์ acc์ ๋ค์ด๊ฐ๋ ๊ฐ์ด๋ค.
์ฐ์ด์ง ์์์ง๋ง, ์ธ๋ฒ์งธ ์ธ์๋ก currentIdx ๊ฐ ์๋ค. ์ด๊ฑด ์ ํ์ฌํญ์ด๋ค. ํด๋น ์ธ์๋ ํ์ฌ ์ํ ์ค์ธ ์์์ index ๊ฐ์ ์ธ์๋ก ๋ฐ๋๋ค.
์ฌ๊ธฐ์๋ ์ด์ ์คํ์ ๋ฐํ ๊ฐ์ ํ์ฌ ์ํ ์ค์ธ ์์์ ๊ณ์ ๋ํ๋ ๋ฐ๋ณต์ ํ๋ค.
5. ์ค์ค๋ก ํด๋ณด๊ธฐ
(1) ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์ ๋ ๋ฒจ์์ ๋ฐ๋ก ๊ตฌ์กฐ๋ถํด ํ ๋น ๋ฐ์์ ์จ๋ณด๊ธฐ. ๊ธฐ๋ณธ๊ฐ๋ ์จ๋ณด๊ธฐ
(2) ๋ฐฐ์ด์ ๋งค๊ฐ๋ณ์ ๋ ๋ฒจ์์ ๋ฐ๋ก ๊ตฌ์กฐ๋ถํด ํ ๋น ๋ฐ์์ ์จ๋ณด๊ธฐ
(3) rest ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๊ณ์ฐ ํด๋ณด๊ธฐ
๋ฐํ๊ฐ์ ๊ทธ๋ฅ ๋๋๋ฉด ์ถ๋ ฅ ์๋๋ค. ์ถ๋ ฅ ํจ์๋ฅผ ์จ์ผ์ง ์ถ๋ ฅ๋๋ค!