๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript

[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ - ํ•จ์ˆ˜

by ํฌ๊ตฌ๋ฆฌ 2021. 3. 29.

๐Ÿ“Œ ์ต๋ช… ํ•จ์ˆ˜

function () {}

์ด๋ฆ„์ด ๋ถ™์–ด์žˆ์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ์ต๋ช…ํ•จ์ˆ˜(anonymous function)๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

๐Ÿ“Œ ์„ ์–ธ์  ํ•จ์ˆ˜

function ํ•จ์ˆ˜() {

}

let ํ•จ์ˆ˜ = function () {};

'์ต๋ช…ํ•จ์ˆ˜'์™€ ๋‹ฌ๋ฆฌ ์ด๋ฆ„์ด ์žˆ๋Š” ํ•จ์ˆ˜๋‹ค.

 

๐Ÿ“Œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’

๋งค๊ฐœ๋ณ€์ˆ˜ : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ด„ํ˜ธ ์•ˆ์— ์ ๋Š” ๊ฒƒ(input)
๋ฆฌํ„ด๊ฐ’ : ํ•จ์ˆ˜์˜ ์ตœ์ข… ๊ฒฐ๊ณผ(output)
function ํ•จ์ˆ˜(๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜) {
    
    // ์ฝ”๋“œ ๋‚ด์šฉ
    
    return ๋ฆฌํ„ด๊ฐ’
}

 

๐Ÿ“Œ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜ ์•ž์— ๋งˆ์นจํ‘œ 3๊ฐœ(...)๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์ด ๋ฐฐ์—ด๋กœ ๋“ค์–ด์˜จ๋‹ค.
function ํ•จ์ˆ˜ ์ด๋ฆ„(...๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜) { }

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ณ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜(rest parameter)๋ผ๋Š” ํŠน์ดํ•œ ํ˜•ํƒœ์˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“Œ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ผ๋ฐ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐํ•ฉํ•˜๊ธฐ

function ํ•จ์ˆ˜ ์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ...๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜) { }

์ˆœ์„œ์— ๋งž๊ฒŒ ์ผ๋ฐ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐ€๊ณ , ๋‚จ์€ ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜(๋ฐฐ์—ด) ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 

๐Ÿ“Œ ์ „๊ฐœ ์—ฐ์‚ฐ์ž

ํ•จ์ˆ˜ ์ด๋ฆ„(...๋ฐฐ์—ด)

๋ฐฐ์—ด์„ ์ „๊ฐœํ•ด์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์ „๊ฐœ ์—ฐ์‚ฐ์ž(spread operator)

 

๐Ÿ“Œ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜

ํ•จ์ˆ˜ ์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜=๊ธฐ๋ณธ๊ฐ’, ๋งค๊ฐœ๋ณ€์ˆ˜=๊ธฐ๋ณธ๊ฐ’)

 

๐Ÿ“Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜๋„ ํ•˜๋‚˜์˜ ์ž๋ฃŒํ˜•์ด๋ฏ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. - JS์—์„œ ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด๋‹ค.)

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ(callback)ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜(1) : ์„ ์–ธ์  ํ•จ์ˆ˜ ์‚ฌ์šฉ
function callThreeTimes (callback) {
	for(let i = 9; i < 2; i++) {
    	callback(i)
    }
}

function print (i) {
	console.log(`${i}๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ`)
}

callThreeTimes(print) // ํ•จ์ˆ˜ ํ˜ธ์ถœ

/*
0๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
1๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
2๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
*/

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜(2) : ์ต๋ช… ํ•จ์ˆ˜ ์‚ฌ์šฉ
function callThreeTimes (callback) {
	for(let i = 9; i < 2; i++) {
    	callback(i)
    }
}

callThreeTimes(function(i) {
	console.log(`${i}๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ`)
}) // ํ•จ์ˆ˜ ํ˜ธ์ถœ

/*
0๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
1๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
2๋ฒˆ์งธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
*/

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜ : forEach()

๋ฐฐ์—ด์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋‹ค.

๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

function (value, index, array) { }

 

const numbers = [279, 13, 3, 12, 7]

numbers.forEach(function (value, index, array) {
	console.log(`${index}๋ฒˆ์งธ ์š”์†Œ : ${value}`)
})

/*
0๋ฒˆ์งธ ์š”์†Œ : 279
1๋ฒˆ์งธ ์š”์†Œ : 13
2๋ฒˆ์งธ ์š”์†Œ : 3
3๋ฒˆ์งธ ์š”์†Œ : 12
4๋ฒˆ์งธ ์š”์†Œ : 7
*/

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜ : map()

๋ฐฐ์—ด์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋‹ค.

์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๋ฆฌํ„ดํ•œ ๊ฐ’๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

let numbers = [5, 4, 3, 2, 1]

numbers = numbers.map(function (value, index, array) {
	return value * value
})

numbers.forEach(console.log)

/*
25 0 Array(5)
16 1 Array(5)
9 2 Array(5)
4 3 Array(5)
1 4 Array(5)
*/

 

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜ : filter()

๋ฐฐ์—ด์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋‹ค.

์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์ด true์ธ ๊ฒƒ๋“ค๋งŒ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜๋‹ค.

const numbers = [1, 2, 3, 4, 5]
const evenNumbers = numbers.filter(function (value) {
	return value % 2 === 0
})

console.log(`์›๋ž˜ ๋ฐฐ์—ด : ${numbers}`)
console.log(`์ง์ˆ˜๋งŒ ์ถ”์ถœ : ${evenNumbers}`)

/*
์›๋ž˜ ๋ฐฐ์—ด : 1,2,3,4,5
์ง์ˆ˜๋งŒ ์ถ”์ถœ : 2,4
*/

 

๐Ÿ“Œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

map(), filter() ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์ž…๋ ฅํ•˜๊ณ ์ž ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(arrow function)๋ผ๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

function ํ‚ค์›Œ๋“œ ๋Œ€์‹  ํ™”์‚ดํ‘œ(=>)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(๋งค๊ฐœ๋ณ€์ˆ˜) => {

} ๋ถˆ ํ‘œํ˜„์‹ || ๋ถˆ ํ‘œํ˜„์‹์ด ๊ฑฐ์ง“์ผ ๋•Œ ์‹คํ–‰ํ•  ๋ฌธ์žฅ

/*----------------------------------------*/

(๋งค๊ฐœ๋ณ€์ˆ˜) => ๋ฆฌํ„ด๊ฐ’


const array = [1, 2, 3, 4, 5]
array.map((value) => value * value)
// (5) [1, 4, 9, 16, 25]

 

let numbers = [1, 2, 3, 4, 5, 6, 7]

numbers
	.filter((value) => value % 2 === 0)
    .map((value) => value * value)
    .forEach((value) => {
    	console.log(value)
    })
    
/*
4
16
36
*/

์œ„์ฒ˜๋Ÿผ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ค„์ค„์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฉ”์†Œ๋“œ ์ฒด์ด๋‹(method chaining)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


โ€ป ์ฐธ๊ณ ๋„์„œ : ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(ํ˜ผ๊ณต์Šค)

๋Œ“๊ธ€