์๋ฌธ์ด ๋ ์ด์
๊ณ ์ฐจํจ์ ๋ถ๋ถ์ ๋ค์ ๊ณต๋ถํ๋ค๊ฐ, ์๋ ๋ค ๊ฐ์ง ๋จ์ด๋ค๊ณผ ๊ด๊ณ์ฑ์ ๋ํ ์๋ฌธ์ด ๋ค์๋ค.
'๊ณ ์ฐจํจ์'
'ํจ์ํ ํ๋ก๊ทธ๋๋ฐ'
'์์ํจ์'
'๋ถ๋ณ์ฑ'
์ ๋ฐฐ์ด์ ๊ณ ์ฐจํจ์์์ ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ์ฐ๋ฉด ์ข์ง ์์ ๊ฒ์ผ๊น?
์ฌ์ค ์์ง๊น์ง๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ ์ฝ๋ฉ์ ํ๋ ๋ฌด์์์ ์ผ๋ก ๋ฐฐ์ด์ ๋ฉ์๋๋ค๋ณด๋ค ์์ ๋ ์ต์ ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ์ฐ๊ณ ์๋๋ฐ, ๊ทธ๊ฒ ์ข์ง ์๋ค๊ณ ํ๋ ์๋ฌธ์ด ๋ค์๋ ๊ฒ ๊ฐ๋ค. ๋๋ถ์ด, ์์ง ์ฝ๋ ์์์ ์์ ์๋ฌธ์ ๋ํ ํด๋ต์ ์ ๋๋ก ๋๊ปด๋ณด์ง ์์์์ด๊ธฐ๋ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง ๋ฐ๋ก๋
ํจ์๋ ์ต๋ํ ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ผ๋ก ๋ํ๋ด์ผ ํ๋ค๊ณ ์๊ณ ์๋ค. ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ๋จ๋ฐํ๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์ง ์๊ณ , ๋ค๋ฅธ ์ธต์ ์ค์ฝํ ๋ธ๋ก์ ๋ง๋๋ ๊ฒ์ด๋ฏ๋ก ์ฝ๋ ์์ฑ ์ ์ค์ํ ํ๋ฅ ๋ ๋์์ง๋ฏ๋ก ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ํ๋๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ ๋ฅผ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋์ดํด ๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
1. ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ
๊ณ ์ฐจํจ์๋ ์ฃผ๋ก ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋ฐ ํจ์์์ ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ๋จ๋ฐํ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค. ํ๋ ๊ฐ ์ ๋๋ฉด ๊ด์ฐฎ์ง๋ง, ์ฝ๋๊ฐ ๋ฐฉ๋ํด์ง์๋ก ์ดํดํ๊ธฐ ์ด๋ ค์ด ์กฐ๊ฑด์์ด ๋ง์์ง๊ณ , ๊ฒฐ๊ตญ ์ฝ๋์ ์๋๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ค์์ง๊ธฐ ๋ง๋ จ์ด๋ค.
2. ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง
๋ณดํต ๊ณ ์ฐจํจ์๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๊ณ '๋ชจ๋ํ'ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋, ๋ณดํต ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์์ ๋ณ๊ฒฝํ๋ ์ฝ๋๊ฐ ํจ์ ์์ ์์ฌ ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ํผ๋์ ๊ฐ์ค์ํฌ ๋ฟ๋ง ์๋๋ผ, ํจ์๊ฐ ํ ๊ฐ์ง ์ผ๋ง ํ๋ ์์น์ ์ด๊ธฐ๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค.
3. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
๋ง์ ๊ณ ์ฐจํจ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์์น์ ๋ฐ๋ฅธ๋ค. ์ด๋ฌํ ์์น ์ค ํ๋๋ ์์ ํจ์(์ธ๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋์ผํ ์ ๋ ฅ์ ๋ํด ํญ์ ๋์ผํ ์ถ๋ ฅ์ ๋ฐํํ๋ ํจ์)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ฉด ํจ์๊ฐ ๋ ์ด์ ์์ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ, ์ด๋ ์ฝ๋์ ์์ธก ๋ถ๊ฐ๋ฅ์ฑ๊ณผ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋์ผ ์ ์๋ค.
์๋ก ์ ์ธ ์ค๋ช
์ฑ <๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive>์ ๋ฐ๋ฅด๋ฉด, ์๋ก ์ ์ธ ์ค๋ช ์ ์๋์ ๊ฐ๋ค. ๋ ๊ฐ๊ฒฐํ ์ค๋ช ์ด๋ค.
๊ณ ์ฐจํจ์(Higher-Order Function, HOF)๋ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋งํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ฏ๋ก ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ์ธ์๋ก ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๋ฐํํ ์๋ ์๋ค. ๊ณ ์ฐจํจ์๋ ์ธ๋ถ ์ํ์ ๋ณ๊ฒฝ์ด๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ํผํ๊ณ , ๋ถ๋ณ์ฑ์ ์งํฅํ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ฐ์ ๋๊ณ ์๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ํจ์์ ๋ณด์กฐํจ์์ ์กฐํฉ์ ํตํด ๋ก์ง ๋ด์ ์กด์ฌํ๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ ๊ฑฐํ์ฌ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ณ , ๋ณ์์ ์ฌ์ฉ์ ์ต์ ํ์ฌ ์ํ ๋ณ๊ฒฝ์ ํผํ๋ ค๋ ํ๋ก๊ทธ๋จ ํจ๋ฌ๋ค์์ด๋ค.
์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ์ ๋ก์ง์ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ํ์ฌ ๊ฐ๋ ์ฑ์ ํด์น๊ณ , ๋ณ์๋ ๋๊ตฐ๊ฐ์ ์ํด ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์์ด ์ค๋ฅ ๋ฐ์์ ๊ทผ๋ณธ์ ์ธ ์์ธ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฒฐ๊ตญ ์์ ํจ์๋ฅผ ํตํด ๋ถ์ ํจ๊ณผ๋ฅผ ์ต๋ํ ์ต์ ํ์ฌ ์ค๋ฅ๋ฅผ ํผํ๊ณ , ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ๋ ธ๋ ฅ์ ์ผํ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ฝ๋๋ฅผ ํตํด ์์๋ณด์
์๋์ ๋ ๊ฐ์ง ์์ ์ฝ๋๋ฅผ ํตํด ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๊ฒฝ์ฐ์, ๊ณ ์ฐจํจ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ฅผ ํ๋์ ๋น๊ตํด ๋ณด์.
์์ 1: ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ฝ๋
๋ฐฐ์ด์ ์์ ์ค์์ ์ง์๋ง ํํฐ๋งํ๊ณ , ๊ฐ ์ง์๋ฅผ ์ ๊ณฑํ ํ ๊ทธ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์ ๋ํ๋ด๋ ์ฝ๋๋ค.
function sumOfEvenSquares(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
sum += arr[i] * arr[i];
}
}
return sum;
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = sumOfEvenSquares(numbers);
console.log(result); // ์ถ๋ ฅ: 220
์ ์ฝ๋๋ ์กฐ๊ฑด๋ฌธ (if (arr[i] % 2 === 0))๊ณผ ๋ฐ๋ณต๋ฌธ (for ๋ฃจํ)์ ์ฌ์ฉํ์ฌ ์์ฑ๋์๋ค. ์ด ์ฝ๋๋ ๋์ํ์ง๋ง, ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ผ๋ก ์ธํด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ , ๋น์ทํ ํจํด์ ์ฝ๋๊ฐ ์ค๋ณต๋๋ฏ๋ก ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
์์ 2: ๊ณ ์ฐจํจ์๋ฅผ ์ฌ์ฉํ ์ฝ๋
function sumOfEvenSquares(arr) {
return arr
.filter((num) => num % 2 === 0) // ์ง์๋ง ํํฐ๋ง
.map((num) => num * num) // ์ ๊ณฑ
.reduce((acc, num) => acc + num, 0); // ํฉ๊ณ ๊ณ์ฐ
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = sumOfEvenSquares(numbers);
console.log(result); // ์ถ๋ ฅ: 220
์ ์ฝ๋๋ filter, map, reduce์ ๊ฐ์ ๊ณ ์ฐจํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ฝ๋๋ณด๋ค ์ฐ์ฐ์ ์ํด ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค์ด ๋์ด๋์ด ์์ฐจ์ ์ผ๋ก ์ฝ๋๊ฐ ์ฝํ๊ธฐ์ ๋ ๊ฐ๊ฒฐํด ๋ณด์ธ๋ค.
๋๋ถ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์น์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ฑ์ด ํฅ์๋๋ฉฐ, ์ฝ๋ ์ค๋ณต์ด ์์ด์ ธ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง ๊ฒ ๊ฐ๋ค. ๋ฟ๋ง ์๋๋ผ ์กฐ๊ฑด๊ณผ ๋ฐ๋ณต์ ๋จ๋ฐํด ๋ถํ์ํ ์ฐ์ฐ์ ๋ฐฉ์งํ๊ณ , ๋ฑ ํ์ํ ์ฐ์ฐ๋ง ํ๋ค๋ ์ฅ์ ๋ ์๋ค.
๊ฒฐ๋ก
๋ฐ๋ผ์ ๊ฐ๋ฅํ๋ฉด ๋ฐฐ์ด์ ๊ณ ์ฐจํจ์์์ ์กฐ๊ฑด๋ฌธ ๋ฐ๋ณต๋ฌธ ๋์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์น์ ๋ฐ๋ฅด๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์กฐ์ํ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋ฉฐ, ๋ฒ๊ทธ๋ฅผ ์ค์ด๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ ๊ฒ์ด๋ค.
๐ ๋ด์ฉ ์ฐธ์กฐ
- ์ฑ <๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive>
'๐ Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด๋ฑํ์๋ ์ดํดํ๊ธฐ ์ฌ์ด ์๋ฐ์คํฌ๋ฆฝํธ '๋จ์ถํ๊ฐ' (0) | 2023.09.24 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ symbol์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น? (0) | 2023.09.19 |
์์๋๋ฉด ์ฌ๋ฏธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ญ์ฌ (1) | 2023.09.10 |
์ ES6๋ถํฐ ํด๋์ค ๊ฐ๋ ์ด ์ถ๊ฐ๋๊ฑธ๊น? (0) | 2023.09.07 |
์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๋์ ์๋ฆฌ (0) | 2023.09.02 |
๋๊ธ