ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

ํ•จ์ˆ˜๋ž€?

์ˆ˜ํ•™์˜ ํ•จ์ˆ˜๋Š” "์ž…๋ ฅ"์„ ๋ฐ›์•„ "์ถœ๋ ฅ"์„ ๋‚ด๋ณด๋‚ด๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•จ์ˆ˜๋„ ์ด์™€ ๊ฐ™์€ ๊ฐœ๋…์ธ๋ฐ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

// ํ•จ์ˆ˜ ์„ ์–ธ
function add(x,y) {
    return x + y;
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
add(2,5); // ๋ฐ˜ํ™˜๊ฐ’ 7

ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๊ณ  ์ธ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋ฉด์„œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ง„ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ ๋ธ”๋ก์— ๋‹ด๊ธด ๋ฌธ๋“ค์ด ์ผ๊ด„์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์‹คํ–‰ ๊ฒฐ๊ณผ์ธ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹๋ณ„์ž : ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„ (add)
  • ๋งค๊ฐœ๋ณ€์ˆ˜(parameter) : ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ž…๋ ฅ์„ ์ „๋‹ฌ๋ฐ›๋Š” ๋ณ€์ˆ˜(x,y)
  • ์ธ์ˆ˜(argument) : ์ž…๋ ฅ (2, 5)
  • ๋ฐ˜ํ™˜๊ฐ’(return value) : ์ถœ๋ ฅ (7)

 

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ์˜์„ฑ๊ณผ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ

์‹คํ–‰ ์‹œ์ ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ช‡ ๋ฒˆ์ด๋“  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ์˜์„ฑ์ด ๋†’์•„์ง€๊ณ , ์‹ค์ˆ˜๋ฅผ ์ค„์—ฌ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

์ ์ ˆํ•œ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ํ†ตํ•ด ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ์•Š๊ณ ๋„ ํ•จ์ˆ˜์˜ ์—ญํ• ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด ํƒ€์ž…์˜ ๊ฐ’์ด๋ผ ํ•จ์ˆ˜๋„ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var f = function add(x,y) {
    return x + y;
}

f(1 + 2); // 3

ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์˜ ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
ํ•จ์ˆ˜ ์ด๋ฆ„ - ์‹๋ณ„์ž๋ผ ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ
- ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž
- ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ด์„œ ๊ธฐ๋ช…ํ•จ์ˆ˜์™€ ๋ฌด๋ช…/์ต๋ช… ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก - 0๊ฐœ ์ด์ƒ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„
- ๊ฐ ๋งค๋ฐฐ๋ณ€์ˆ˜์—๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ง€์ •ํ•œ ์ธ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋จ
- ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜์–ด ์‹๋ณ„์ž ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ด์•ผํ•จ
ํ•จ์ˆ˜ ๋ชธ์ฒด - ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ์ผ๊ด„์ ์œผ๋กœ ์‹คํ–‰๋  ๋ฌธ๋“ค์˜ ์ฝ”๋“œ ๋ธ”๋ก
- ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ์˜ํ•ด ์‹คํ–‰๋จ

 

ํ•จ์ˆ˜ ์ •์˜

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ด์ „์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์„ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์‹คํ–‰ํ•  ๋ฌธ๋“ค, ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜ํ™˜ํ•  ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹, Function ์ƒ์„ฑ์ž ํ•จ์ˆ˜, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(ES6) 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋™์ผํ•œ ํ˜•ํƒœ์ง€๋งŒ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ ์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์‹๋ณ„์ž๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ๊ฑฐ๊ธฐ์— ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x, y) {
    return x + y;
}

 

 

 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” *์ผ๊ธ‰ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 *์ผ๊ธ‰ ๊ฐ์ฒด : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๊ฐ’์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ์Œ. ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๊ฐ’์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ผ๊ธ‰ ๊ฐ์ฒด๋ผ ํ•จ.

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
var add = function (x, y) {
    return x + y;
};

์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์˜ ํ•จ์ˆ˜ ์ด๋ฆ„์€ ์ƒ๋žตํ•ด ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ์œ ์‚ฌํ•ด ๋ณด์ด์ง€๋งŒ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ "ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ"์ด๊ณ , ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ "ํ‘œํ˜„์‹์ธ ๋ฌธ"์ด๋ผ๋Š” ์ฐจ์ด์ ์ด ์žˆ์–ด ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜ ์ƒ์„ฑ ์‹œ์ ๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜๊ณ  ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

console.dir(add); // f add(x,y)
console.dir(sub); // undefined

console.log(add(1, 2)); // 3
console.log(sub(1, 2)); // TypeError

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x,y) {
    return x + y;
}

// ํ•จ์ˆ˜ ํ‘œํ˜„์„
var sub = function (x,y) {
    return x - y;
}
  • add()๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋กœ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์‹๋ณ„์ž๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์ฝ”๋“œ์˜ ์„ ๋‘๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ณ ์œ  ํŠน์ง•์„ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ add๋ฅผ ์„ ์–ธ๋ฌธ ์ด์ „์— ํ˜ธ์ถœํ•ด๋„ ์ •์ƒ ์ž‘๋™ ํ•ฉ๋‹ˆ๋‹ค.
  • sub()๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋กœ ๋ณ€์ˆ˜๊ฐ€ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์ด์ „์— undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ณ  ๋Ÿฐํƒ€์ž„์— ํ‰๊ฐ€๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋„ ํ• ๋‹น๋ฌธ์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ‘œํ˜„์‹ ์ด์ „์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด TypeError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Function ์ƒ์„ฑ์ž ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ๋นŒํŠธ์ธ ํ•จ์ˆ˜๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก๊ณผ ํ•จ๊ป˜ ๋ชธ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•˜๋ฉด์„œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋ฉด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

var add = new Function('x', 'y', 'return x + y');

console.log(add(2,5)); // 7

ํ•˜์ง€๋งŒ Function ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ฐฉ์‹์€ ํด๋กœ์ €๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ๋“ฑ์˜ ๋‹จ์ ์ด ์žˆ์–ด์„œ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

ES6์—์„œ ๋„์ž…๋œ function ํ‚ค์›Œ๋“œ ๋Œ€์‹  ํ™”์‚ดํ‘œ => ๋ฅผ ์ด์šฉํ•ด ์ข€๋” ๊ฐ„๋žตํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋•Œ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜๋˜๋ฉฐ *๋‚ด๋ถ€ ๋™์ž‘ ๋˜ํ•œ ๊ฐ„๋žตํ™” ๋˜์–ด์žˆ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

const add = (x,y) => x + y;

console.log(add(2,5)); // 7

** ๋‚ด๋ถ€ ๋™์ž‘ ๊ฐ„๋žตํ™” 

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ๊ธฐ์กด ํ•จ์ˆ˜์™€ this ๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์ด ๋‹ค๋ฆ„
  • prototype ํ”„๋กœํ„ฐํ‹ฐ๊ฐ€ ์—†๊ณ  arguments ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ

 

ํ•จ์ˆ˜ ํ˜ธ์ถœ

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ˜„์žฌ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ค‘๋‹จํ•˜๊ณ  ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋กœ ์‹คํ–‰ ํ๋ฆ„์„ ์˜ฎ๊ธฐ๊ฒŒ ๋˜๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด์˜ ๋ฌธ๋“ค์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž์™€ ํ•œ ์Œ์˜ ์†Œ๊ด„ํ˜ธ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์—ฐ์‚ฐ์ž ๋‚ด์—๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ 

 

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜

ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฐ’์„ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ธ์ˆ˜๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.

function add(x,y) {
    console.log(x, y); // 1, 2
    return x + y;
}

var result = add(1,2); // result = 3
console.log(x, y); // ReferenceError

๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ์–ธํ•˜๋ฉฐ, ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ x์™€ y๊ฐ€ undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ์ดํ›„ ์ธ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

 

์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ๋ชธ์ฒด ์™ธ๋ถ€์—์„œ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ x,y๋ฅผ ์ฐธ์กฐํ•˜๋ ค ํ•˜๋ฉด ์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ReferenceError๊ฐ€ ๋ฐœ์ƒ๋ฉ๋‹ˆ๋‹ค.

 

function add(x,y) {
    console.log(x, y); // 1, undefined
    return x + y;
}

console.log(add(1)); // NaN

ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์ธ์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ undefined๋กœ ์ดˆ๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์˜ ์˜ˆ์‹œ๋Š” 1 + undefined์˜ ๊ฒฐ๊ณผ์ธ NaN์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

function add(x,y) {
    console.log(arguments); // Arguments(3) [1,2,3, callee: f, Symbol(Symbol.iterator): f]
    return x + y;
}

console.log(add(1,2,3)); // 3

๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์ธ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๊ฒฝ์šฐ์—” ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ชจ๋“  ์ธ์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณด๊ด€๋˜๊ธฐ ๋•Œ๋ฌธ์— arguments ๊ฐ์ฒด๋Š” ๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

์ธ์ˆ˜ ํ™•์ธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜ ํ™•์ธ ๋ฌธ์ œ์ 

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Œ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ž… ์–ธ์–ด๋กœ์„œ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์‚ฌ์ „์— ์ง€์ •ํ•  ์ˆ˜ ์—†์Œ

์ธ์ˆ˜ ํ™•์ธ ํ•ด๊ฒฐ๋ฒ•

  • ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์ ์ ˆํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ( ๋Ÿฐํƒ€์ž„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ)
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์ •์  ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ƒ์œ„ ํ™•์žฅ์„ ๋„์ž… (์ปดํŒŒ์ผ ์‹œ์  ๋ฐฉ์ง€)
  • arguments ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ธ์ˆ˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธ
  • ES6์—์„œ ๋„์ž…๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ธ์ˆ˜ ์ฒดํฌ ๋ฐ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ„์†Œํ™”

 

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜

์ด์ƒ์ ์ธ ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•ด์•ผํ•˜๋ฉฐ ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋Š” ์ ์„ ์ˆ˜๋ก ์ข‹๊ณ , ์ตœ๋Œ€ 3๊ฐœ ์ด์ƒ์„ ๋„˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๊ทธ ์ด์ƒ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

// jQuery์˜ ajax ๋ฉ”์„œ๋“œ์— ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ์˜ˆ
$.ajax({
    method: 'POST',
    url: '/user',
    data: { id: 1, name: 'Lee' },
    cache: false
});
  • ํ”„๋กœํผํ‹ฐ ํ‚ค๋งŒ ์ •ํ™•ํžˆ ์ง€์ •ํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋จ
  • ํ”„๋กœํผํ‹ฐ ํ‚ค(๋ช…์‹œ์ ์œผ๋กœ ์ธ์ˆ˜์˜ ์˜๋ฏธ๋ฅผ ์„ค๋ช…)๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง€๊ณ  ์‹ค์ˆ˜๊ฐ€ ์ค„์–ด๋“ฆ
  • ๊ฐ์ฒด๋ฅผ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ์™ธ๋ถ€ ๊ฐ์ฒด๋„ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‹จ์ 

 

๋ฐ˜ํ™˜๋ฌธ

๋ฐ˜ํ™˜๋ฌธ์€ return ํ‚ค์›Œ๋“œ์™€ ํ‘œํ˜„์‹์œผ๋กœ ์ด๋ค„์ง„ ๋ฌธ์œผ๋กœ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

  • ๋ฐ˜ํ™˜๋ฌธ์€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋‚˜๊ฐ (return๋ฌธ ์ดํ›„ ๋ฌธ์€ ๋ฌด์‹œ๋จ)
  • return ํ‚ค์›Œ๋“œ ๋’ค์— ์˜ค๋Š” ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•ด ๋ฐ˜ํ™˜
  • ๋ฐ˜ํ™˜ ํ‘œํ˜„์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋จ

 

์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์™ธ๋ถ€ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ

์›์‹œ ๊ฐ’์€ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ, ๊ฐ์ฒด๋Š” ์ฐธ์กฐ์— ์˜ํ•œ ์ ˆ๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์— ๋”ฐ๋ผ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

*์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋น„๊ต์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์•„๋ž˜๊ธ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

https://j-su2.tistory.com/57

 

[JavaScript] ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋น„๊ต

์›์‹œ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ์ฐจ์ด์  ์›์‹œ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ํŠน์ง•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ ์ฐจ์ด์ ์„ ํ‘œ๋กœ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์›์‹œ๊ฐ’ ๊ฐ์ฒด ํƒ€์ž… ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€์ˆ˜์— ์‹ค์ œ ๊ฐ’

j-su2.tistory.com

function changeVal(primitive, obj) {
    primitive += 100;
    obj.name = 'Kim';
}

var num = 100;
var person = { name: 'Lee' };

changeVal(num, person);

// ์›์‹œ ๊ฐ’์€ ์›๋ณธ์ด ํ›ผ์†๋˜์ง€ ์•Š์Œ
console.log(num); // 100

// ๊ฐ์ฒด๋Š” ์›๋ณธ์ด ์‰์†๋จ
console.log(person); // { name: "Kim" }

๋”ฐ๋ผ์„œ ์œ„์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด num์€ ์›์‹œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, person์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ธ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์›๋ณธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€์ˆ˜ ํšจ๊ณผ๋Š” ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์€ ๊ฐ์ฒด๋ฅผ ๋ถˆ๋ณ€ ๊ฐ์ฒด์ธ *์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์›์ฒœ๋ด‰์‡„ํ•˜๊ณ  ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ฐ์ฒด์˜ ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๊นŠ์€ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žฌํ• ๋‹น์„ ํ†ตํ•ด ๊ต์ฒดํ•˜์—ฌ ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค.

 

*์ˆœ์ˆ˜ ํ•จ์ˆ˜ : ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜

 

๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์‹œ์— ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜

(function () {
    var a = 3;
    var b = 5;
    return a*b;
}());

 

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ
  • ๋ฐ˜๋“œ์‹œ ๊ทธ๋ฃน ์—ฐ์‚ฐ์ž( ... )๋กœ ๊ฐ์‹ธ์•ผํ•จ

 

์žฌ๊ท€ ํ•จ์ˆ˜

ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

function countdown(n) {
    // ํƒˆ์ถœ ์กฐ๊ฑด
    if(n < 0) { 
        return;
    }
    console.log(n);
    countdown(n - 1); // ์žฌ๊ท€ํ˜ธ์ถœ
}

countdown(10); // 10 9 8 7 6 5 4 3 2 1 0
  • ๋ฐ˜๋ณต๋˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋Š” ํƒˆ์ถœ ์กฐ๊ฑด์„ ๋งŒ๋“œ์‹œ ๋งŒ๋“ค์–ด์•ผํ•จ (์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ์—๋Ÿฌ ๋ฐฉ์ง€)
  • ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๋•Œ ํ•œ์ •์ ์œผ๋กœ ์‚ฌ์šฉ

 

์ค‘์ฒฉ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜๋กœ, ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ค‘์ ‘ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

function outer() {
    var x = 1;

    // ์ค‘์ฒฉ ํ•จ์ˆ˜
    function inner() {
        var y = 2;
        // ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ
        console.log(x + y); // 3
    }

    inner();
}

outer();
  • ์ค‘์ฒจ ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ์ฃผ๋กœ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋•๋Š” ํ—ฌํผ ํ•จ์ˆ˜์˜ ์—ญํ• 
  • ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ์Œ

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ๊ณ ์ฐจํ•จ์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

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

function repaet(n, f) {
    for(var i=0;i<n;i++) {
        f(i);
    }
}

var logOdds = function(i) {
    if (i%2) console.log(i);
};

repeat(5,logOdds); // 1 3
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋„ ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜์–ด ํ—ฌํผ ํ•จ์ˆ˜์˜ ์—ญํ• ์„ ํ•จ
  • ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ž์‹ ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ํ•ฉ์„ฑํ•จ
  • ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋งค๋ฐฐ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์‹œ์ ์„ ๊ฒฐ์ •ํ•ด ํ˜ธ์ถœ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์—๋„ ํ™œ์šฉ๋˜๋Š” ํŒจํ„ด์ž„
  • ๋ฐฐ์—ด ๊ณ ์ฐจ ํ•จ์ˆ˜์—์„œ๋„ ์‚ฌ์šฉ๋จ

 

์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฉ€ํ‹ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด๋กœ์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋ณด์กฐ ํ•จ์ˆ˜์˜ ์กฐํ•ฉ์„ ํ†ตํ•ด ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ตœ์†Œํ™”ํ•ด์„œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ–ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ตœ๋Œ€ํ•œ ์–ต์ œํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์ข…๋ฅ˜ ์„ค๋ช…
์ˆœ์ˆ˜ ํ•จ์ˆ˜ - ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์—†์Œ (์–ด๋–ค ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€๋„ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜์ง€๋„ ์•Š์Œ)
- ๋™์ผํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ
- ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์Œ
- ์ธ์ˆ˜์˜ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•จ
๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜ - ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์žˆ์Œ (์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•จ)
- ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง
- ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œ์ผœ ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜๊ณ , ์˜ค๋ฅ˜ ๋ฐœ์ƒ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Œ

 

 

*ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๊ธ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

https://j-su2.tistory.com/35?category=1033772 

 

[Design Pattern] OOP์™€ FP

OOP๋ž€? OOP๋Š” Object Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. class์™€ object์— ๊ธฐ๋ฐ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„(๋””์ž์ธ ํŒจํ„ด)์œผ๋กœ, ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ class๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์—

j-su2.tistory.com

 

 

 

[์ถœ์ฒ˜] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

https://wikibook.co.kr/mjs/

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

269๊ฐœ์˜ ๊ทธ๋ฆผ๊ณผ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๋Š” ์„ค๋ช…์œผ๋กœ ‘์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ’๋ฅผ ์ดํ•ดํ•˜์ž! ์›นํŽ˜์ด์ง€์˜ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ œํ•œ์ ์ธ ์šฉ๋„๋กœ ํƒœ์–ด๋‚œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณผ๋„

wikibook.co.kr