๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Language/JavaScript

์™œ ๊ณ ์ฐจํ•จ์ˆ˜์—์„œ๋Š” ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ์ œ๊ฑฐํ• ๊นŒ?

by Dev. Ella 2023. 9. 17.

์˜๋ฌธ์ด ๋“  ์ด์œ 

๊ณ ์ฐจํ•จ์ˆ˜ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€, ์•„๋ž˜ ๋„ค ๊ฐ€์ง€ ๋‹จ์–ด๋“ค๊ณผ ๊ด€๊ณ„์„ฑ์— ๋Œ€ํ•œ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

'๊ณ ์ฐจํ•จ์ˆ˜'
'ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'
'์ˆœ์ˆ˜ํ•จ์ˆ˜'
'๋ถˆ๋ณ€์„ฑ'

์™œ ๋ฐฐ์—ด์˜ ๊ณ ์ฐจํ•จ์ˆ˜์—์„œ ์กฐ๊ฑด๋ฌธ ๋ฐ˜๋ณต๋ฌธ์„ ์“ฐ๋ฉด ์ข‹์ง€ ์•Š์€ ๊ฒƒ์ผ๊นŒ?

 

์‚ฌ์‹ค ์•„์ง๊นŒ์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋“  ์ฝ”๋”ฉ์„ ํ•˜๋“  ๋ฌด์˜์‹์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ๋ฉ”์„œ๋“œ๋“ค๋ณด๋‹ค ์†์— ๋” ์ต์€ ์กฐ๊ฑด๋ฌธ ๋ฐ˜๋ณต๋ฌธ์„ ์“ฐ๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ์ข‹์ง€ ์•Š๋‹ค๊ณ  ํ•˜๋‹ˆ ์˜๋ฌธ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋”๋ถˆ์–ด, ์•„์ง ์ฝ”๋“œ ์ƒ์—์„œ ์œ„์˜ ์˜๋ฌธ์— ๋Œ€ํ•œ ํ•ด๋‹ต์„ ์ œ๋Œ€๋กœ ๋Š๊ปด๋ณด์ง€ ์•Š์•„์„œ์ด๊ธฐ๋„ ํ–ˆ๋‹ค.

 

 

์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ ค์ง„ ๋ฐ”๋กœ๋Š”

ํ•จ์ˆ˜๋Š” ์ตœ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋‹ค. ์กฐ๊ฑด๋ฌธ ๋ฐ˜๋ณต๋ฌธ์„ ๋‚จ๋ฐœํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ์ธต์˜ ์Šค์ฝ”ํ”„ ๋ธ”๋ก์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ์‹ค์ˆ˜ํ•  ํ™•๋ฅ ๋„ ๋†’์•„์ง€๋ฏ€๋กœ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด์œ ๋ฅผ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋‚˜์—ดํ•ด ๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

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>

 

๋Œ“๊ธ€