[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] ๋ถ€ํŠธ์บ ํ”„ - ๊ณ ์ฐจ ํ•จ์ˆ˜

JiEunยท2023๋…„ 3์›” 14์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

๊ณ ์ฐจํ•จ์ˆ˜์™€ ๊ด€๋ จ๋œ ์ผ๊ธ‰๊ฐ์ฒด,์ฝœ๋ฐฑํ•จ์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์ค‘ filter, map, reduce ๋“ฑ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

์˜คํ›„์—” ํŽ˜์–ด ํ™œ๋™์„ ํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.


๐Ÿ“ ์ผ๊ธ‰ ๊ฐ์ฒด(first-class citizen)

Javascript ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
๊ฐ์ฒด์— ์ ์šฉ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

ํŠน์ง•

  • ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž๋กœ ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋กœ์„œ ๋ฆฌํ„ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ(string, number, boolean ๋“ฑ) ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ๊ณ ์ฐจ ํ•จ์ˆ˜(Higher-oder Function)

  • ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜
  • ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

์ฝœ๋ฐฑ ํ•จ์ˆ˜(callback function)

์ „๋‹ฌ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ ๋ฐ›์€ ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฒฝ์šฐ

function sum(num){
	return num + 2;
}

function sumNum(func, num){
	return func(num);
}

let output = sumNum(sum, 4);
console.log(output) // 6
  • sumNum = ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜
  • sumNum์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž func์— ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ func(ํ•จ์ˆ˜)๋Š”, sumNum์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜ ์ด๋‹ค.

    sumํ•จ์ˆ˜ === sumNum์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜

2. ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒฝ์šฐ

function sum(num1){
	return function(num2){
    	return num1 + num2;
    }
}
const num = sum(3);
output = num(2);
console.log(output); // 5
  • sum์€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜
  • sum์€ ์ธ์ž ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ํ•จ์ˆ˜(์ต๋ช…ํ•จ์ˆ˜)๋ฅผ ๋ฆฌํ„ด
  • ๋ฆฌํ„ด๋œ ์ต๋ช…ํ•จ์ˆ˜๋Š” ์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„ sum๊ณผ ๋”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ด ํ•œ๋‹ค.

    num์ด ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    (Javascript์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด)

๐Ÿ“ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ

map, filter๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(์–•์€ ๋ณต์‚ฌ)

filter(ํ•จ์ˆ˜)

  • ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ์กฐ๊ฑด์„ ๋งŒ์กฑ(true)ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜(์›ํ•˜๋Š” ๊ฐ’์„ ํ•„ํ„ฐ๋งํ•ด ๋ฐ˜ํ™˜)
  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œ์ผฐ์„ ๋•Œ true๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ์š”์†Œ๋“ค๋งŒ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
let arr = [1,2,3,4]

arr.filter(function(el){
	return el % 2 === 0
}) // [2, 4]

arr.filter(function(el){
	return el % 2 === 1
})// [1, 3]

map(ํ•จ์ˆ˜(el, index))

  • ๋ชจ๋“  ์š”์†Œ์— ๋™์ผํ•œ ํ–‰๋™์„ ์ค€ ๊ฐ’์— ๋Œ€ํ•ด ๋ชจ๋‘ ๋ฐ˜ํ™˜
  • ๊ฐ ์š”์†Œ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œํ‚จ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
  • for๋ฌธ๊ณผ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
let arr = [1,2,3,4]

function sum(num){
	return num + 2;
}

arr.map(sum)// [3,4,5,6]
  • ์ฝœ๋ฐฑํ•จ์ˆ˜์— ๋‘ ๋ฒˆ์งธ ์ „๋‹ฌ์ธ์ž๋ฅผ ์ค„ ๊ฒฝ์šฐ index๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
let arr = [1,2,3,4]

arr.map(function(el, idx){
	return `${idx} : ${el}` 
})
// (4) ['0 : 1', '1 : 2', '2 : 3', '3 : 4']

reduce(ํ•จ์ˆ˜(acc, cur, ์ดˆ๊ธฐ๊ฐ’))

  • ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
  • ๊ฐ ์š”์†Œ๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๋งž๊ฒŒ ํ•˜๋‚˜๋กœ ์‘์ถ• ์‹œํ‚จ ๊ฐ’์„ ๋ฐ˜ํ™˜

โœ”๏ธ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

  • ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ acc,
  • cur์€ ๋‘๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.
let arr = [1,2,3,4]

arr.reduce(function(acc, cur){
	return acc + cur
}) //10
  • ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์•„ acc์— 1์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • cur์€ 2๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. arr ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ชจ๋‘ ํ•ฉ์นœ 10์ด ๋ฐ˜ํ™˜ ๋œ๋‹ค.
    acc = 1, cur = 2 โžค 1 + 2 = acc(3)
    acc = 3, cur = 3 โžค 3 + 3 = acc(6)
    acc = 6, cur = 4 โžค 6 + 4 = acc(10)์ตœ์ข…๊ฐ’

โœ”๏ธ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ๊ฒฝ์šฐ

  • ์„ค์ •ํ•œ ๊ฐ’์ด acc,
  • cur์€ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.
let arr = [1,2,3,4]
arr.reduce(function(acc, cur){
	return acc + cur
}, 5) // 15 
  • ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด acc์— 5์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • cur์€ 1๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. arr ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ชจ๋‘ ํ•ฉ์นœ 15์ด ๋ฐ˜ํ™˜ ๋œ๋‹ค.
    acc = 5, cur = 1 โžค 5 + 1 = acc(6)
    acc = 6, cur = 2 โžค 6 + 2 = acc(8)
    acc = 8, cur = 3 โžค 8 + 3 = acc(11)
    acc = 11, cur = 4 โžค 11 + 4 = acc(15)์ตœ์ข…๊ฐ’

โœ”๏ธ ์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•ด ์›ํ•˜๋Š” ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


โœ๏ธ ๋งˆ์น˜๋ฉฐ

์•„์ง Javascript์˜ ๊ธธ์€ ๋ฉ€์—ˆ๋‹ค...
์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์ค‘์š”ํ•˜๊ณ  ๊ทธ ์ค‘ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์–ตํ•˜๋˜
๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”๋ชจํ•ด์„œ ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ํ™•์ธํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฑฐ ๊ฐ™๋‹ค.

์ด๋ฒˆ ํŽ˜์–ดํ™œ๋™์€ ํŽ˜์–ด๋ถ„๊ณผ์˜ ์ˆ˜์ค€ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜์ง€ ์•Š์•„์„œ
ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฏผํ•˜๊ณ  ํ’€์–ด๋ณด๋Š” ์‹œ๊ฐ„์ด ๋„‰๋„‰ํžˆ ์ฃผ์–ด์ ธ ์ข‹์•˜๋‹ค.

์•„์‰ฝ๊ฒŒ ์ „๋ถ€ ํ’€์ง„ ๋ชปํ–ˆ์ง€๋งŒ ์ƒ๊ฐ ๋ณด๋‹ค ๋งŽ์ด ํ’€์—ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์‹œ๋„ˆ์ง€ ํšจ๊ณผ๋ฅผ ๋‚ด ์–ด์ œ ๋ณด๋‹ค ์˜ค๋Š˜ ๋” ์„ฑ์žฅํ•œ ๊ธฐ๋ถ„์ด์˜€๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€