JavaScript function ํ˜ธ์ถœ - JavaScript function hochul

*๐Ÿ”Study Keyword :

โœ…ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์— ๐Ÿ”‘๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜, ๋ฐ˜ํ™˜๋ฌธ์ด ์–ด๋– ํ•œ ํŠน์ง•์„ ๊ฐ€์ง„ ์ฑ„ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๊ณ  ๐Ÿ”‘๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ, ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์–ด๋– ํ•œ ์ฐจ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž !

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

  • WHAT ISโ“ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด๋ž€ '์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ธ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰'์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ˜„์žฌ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ค‘๋‹จํ•˜๊ณ  ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋กœ ์‹คํ–‰ํ๋ฆ„์„ ์˜ฎ๊ฒจ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹นํ•˜์—ฌ ํ•จ์ˆ˜ ๋ชธ์ฒด์˜ ๋ฌธ๋“ค์ด ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ์‹œ์ž‘ํ•œ๋‹ค
  • HOW TO USEโ•โ“ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž์™€ ํ•œ ์Œ์˜ ์†Œ๊ด„ํ˜ธ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž(= ()) ๋‚ด์— 0๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜์—ดํ•˜์—ฌ ํ˜ธ์ถœํ•œ๋‹ค.

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

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

-์ธ์ˆ˜

1> ์ธ์ˆ˜๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์ด์–ด์•ผํ•œ๋‹ค.
2> ์ธ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ง€์ •ํ•œ๋‹ค.
3> ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์— ์ œํ•œ์ด ์—†๋‹ค.

<script>
//ํ•จ์ˆ˜์„ ์–ธ๋ฌธ
function add(x,y){
  return x+y;
}
//ํ•จ์ˆ˜ ํ˜ธ์ถœ
const result = add(1, 2)
//์ธ์ˆ˜ 1๊ณผ 2๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜ x, y์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด์˜ ๋ฌธ๋“ค์ด ์‹คํ–‰๋œ๋‹ค.
</script>

-๋งค๊ฐœ๋ณ€์ˆ˜(์ธ์ž)

1> ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•ด ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ค„์ง„๋‹ค.
2> ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์„ ์–ธํ•œ๋‹ค.
3> ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„(์œ ํฌ๋ฒ”์œ„)๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์ด๊ธฐ์— ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ณ  ์™ธ๋ถ€์—์„œ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

-๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ธ์ˆ˜ ๋ณด๋‹ค ๊ฐœ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๊ฒฝ์šฐ(๋งค๊ฐœ๋ณ€์ˆ˜>์ธ์ˆ˜ ๊ฐœ์ˆ˜) :

  • ํ•จ์ˆ˜๋Š”๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ undefined๊ฐ€ ๋œ๋‹ค.
<script>
//ํ•จ์ˆ˜์„ ์–ธ๋ฌธ
function add(x,y){
  return x+y;
}
//ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2)) // NaN
//x๋Š” 2๊ฐ€ y๋Š” undefined๊ฐ€ ์ „๋‹ฌ๋˜์–ด 2+ unefined๋Š” NaN์ด๋‹ค.
</script>

-์ธ์ˆ˜๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ๊ฐœ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๊ฒฝ์šฐ(์ธ์ˆ˜>๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜) :

  • ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๋Š” ๋ฌด์‹œ๋˜์ง€๋งŒ ๋ฒ„๋ ค์ง€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์•”๋ฌต์ ์œผ๋กœ arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณด๊ด€๋œ๋‹ค.
    ๐Ÿ’ก ์ฐธ๊ณ ) arguments ๊ฐ์ฒด? ํ•จ์ˆ˜ ์ •์˜์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค
<script>
//ํ•จ์ˆ˜์„ ์–ธ๋ฌธ
function add(x,y){
  console.log(arguments) // Arguments(3) {2, 5, 10 ...}
  return x + y;
}
//ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2, 5, 10)); // 7
//์ดˆ๊ณผ๋œ ์ธ์ˆ˜ 10์€ arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ๋ณด๋œ๋‹ค.
</script>

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

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ž…์–ธ์–ด๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์‚ฌ์ „์— ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.
<script>
//ํ•จ์ˆ˜์„ ์–ธ๋ฌธ
function add(x,y){//์–ด๋–ค ํƒ€์ž…์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•˜๋Š”์ง€
  return x + y;//์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜์ด๋‹ค.
}
//ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2)); // undefiend
console.log(add('a','b')); // 'ab'
</script>

์˜ˆ์‹œ1> ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์ ์ ˆํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

<script>
function add(x,y){//์–ด๋–ค ํƒ€์ž…์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•˜๋Š”์ง€
  if(typeof x !== 'number' || typeof y !== 'number'){
  //๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•œ ์ธ์ˆ˜์˜ ํƒ€์ž…์ด ๋ถ€์ ์ ˆํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜๋„๋ก ์„ค๊ณ„
  throw new TypeError('์ธ์ˆ˜์˜ ๊ฐ’ ๋ชจ๋‘ ์ˆซ์ž๊ฐ’์œผ๋กœ ๋„ฃ๋„๋ก!')
  }
  return x + y;
}
//ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2)); // TypeError:'์ธ์ˆ˜์˜ ๊ฐ’ ๋ชจ๋‘ ์ˆซ์ž๊ฐ’์œผ๋กœ ๋„ฃ๋„๋ก!'
console.log(add('a','b')); // TypeError:'์ธ์ˆ˜์˜ ๊ฐ’ ๋ชจ๋‘ ์ˆซ์ž๊ฐ’์œผ๋กœ ๋„ฃ๋„๋ก!'
</script>
  • ์˜ˆ์‹œ2> ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ 1)๋‹จ์ถ• ํ‰๊ฐ€ ํ˜น์€ 2)๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
<script>
// 1) ๋‹จ์ถ•ํ‰๊ฐ€๋กœ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” ๊ฐ’์„ 0์œผ๋กœ ํ• ๋‹น
function add(x,y,z){ 
  x = x || 0; // ๋‹จ์ถ•ํ‰๊ฐ€
  y = y || 0;
  z = z || 0;
  return x + y + z;
}
// 2) ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” ๊ฐ’์„ 0์œผ๋กœ ํ• ๋‹น.
function add(x=0,y=0,z=0){ // ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’
  return x + y + z;
}
console.log(add(1,2)); // 3
console.log(add(1)); // 1
console.log(add(); // 0
</script>

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

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

- ๋ฐ˜ํ™˜๋ฌธ

  • ๋ฐ˜ํ™˜๋ฌธ์€ return ํ‚ค์›Œ๋“œ์™€ ํ‘œํ˜„์‹(๋ฐ˜ํ™˜๊ฐ’)์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค.
  • ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜(return)ํ•œ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ํ‘œํ˜„์‹์œผ๋กœ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ‘œํ˜„์‹์€ return ํ‚ค์›Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ, ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋œ๋‹ค.

-๋ฐ˜ํ™˜๋ฌธ์€ ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ํ•˜๋Š”๋ฐ

  1. ๋ฐ˜ํ™˜๋ฌธ์€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜์—ฌ ๋ฐ˜ํ™˜๋ฌธ ์ดํ›„ ๋‹ค๋ฅธ ๋ฌธ์ด ์กด์žฌํ•˜๋”๋ผ๋„ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฌด์‹œํ•œ์ฒด ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.
<script>
function multyply(x, y){
  return x * y;
  //๋ฐ˜ํ™˜๋ฌธ ์ดํ›„ ๋‹ค๋ฅธ ๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฌด์‹œ๋œ๋‹ค.
  console.log('๋‚œ ์‹คํ–‰๋˜์ง€๋ ')	
}
console.log(multyply(3, 6)); // 15
</script>

2 ๋ฐ˜ํ™˜๋ฌธ์€ return ํ‚ค์›Œ๋“œ ๋’ค์— ์˜ค๋Š” ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‘œํ˜„์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€์˜จ๋‹ค.

<script>
function multyply(x, y){
  //๋ฐ˜ํ™˜๋ฌธ ์ƒ๋žตํ•˜๋ฉด ์•”๋ฌต์ ์œผ๋กœ  undefiend๊ฐ€ ๋ฐ˜ํ™˜
}
console.log(multyply()); // undefiend
</script>

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

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜์–ด
    ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์— ๋”ฐ๋ผ์„œ
    ๊ฐ’(๊ฐ’์ด ๋‹ด๊ธด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
    ํ•œ๋‹ค.
<script>
  //๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์›์‹œ๊ฐ’๊ณผ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
function changeVal(primitive, obj){
	primitive += 100;
 	obj.name = 'kim' 
}
// ์™ธ๋ถ€์ƒํƒœ
const num = 100;
const person = { name : 'jamie' }
//์›์‹œ๊ฐ’์€ ๊ฐ’ ์ž์ฒด๊ฐ€ ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค.
changeVal(num, person);
//์›์‹œ ๊ฐ’์€ ์›๋ณธ์ด ํ›ผ์†๋˜์ง€ ์•Š๋‚˜๋Š”๋‹ค.
console.log(num);// 100  
//๊ฐ์ฒด๋Š” ์›๋ณธ์ด ํ›ผ์†๋œ๋‹ค.
console.log(person) // {name: 'kim'}
</script>
  • ์›์‹œ ํƒ€์ž… ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜ primitive์˜ ๊ฒฝ์šฐ ์›์‹œ ๊ฐ’์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immnutable value)์ด๋ฏ€๋กœ ์ง์ ‘ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์žฌํ• ๋‹น์„ ํ†ตํ•ด ํ• ๋‹น๋œ ์›์‹œ ๊ฐ’์„ ์ƒˆ๋กœ์šด ์›์‹œ๊ฐ’์œผ๋กœ ๊ต์ฒด ํ–ˆ๋‹ค.
  • ๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’(mutable value)์ด๊ธฐ๋ฏ€๋กœ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌํ• ๋‹น ์—†์ด ์ง์ ‘ ํ• ๋‹น๋œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

-์›์‹œํ˜• ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋ถ€์ˆ˜ํšจ๊ณผ์˜ ์ฐจ์ด๐Ÿคทโ€โ™‚๏ธ?

JavaScript function ํ˜ธ์ถœ - JavaScript function hochul

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

Q ) ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๋ง‰์„ ์ˆœ ์—†๋‚˜์œ ๐Ÿ™‹โ€โ™‚๏ธ?

A ) ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ๐Ÿ™†โ€โ™‚๏ธ!

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

๐Ÿ’ก ์ฐธ๊ณ ) ์ˆœ์ˆ˜ ํ•จ์ˆ˜? VS ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ?

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

*๐Ÿ’กconclusion

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ๊ฐ’์„ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜ํ™˜๋ฌธ์ด ์–ด๋– ํ•œ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์–ด๋– ํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ์•Œ์•„๋‘์ž.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™”์ธํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋™์  ํƒ€์ž…์–ธ์–ด๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์„ ์‚ฌ์ „์— ์ง€์ •ํ•  ์ˆ˜ ์—†๊ธฐ์— 1>์ ์ ˆํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์™€ 2>์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ถŒ์žฅํ•˜๋Š” ์ด์ƒ์ ์ธ ๊ฐœ์ˆ˜, 3๊ฐœ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—” ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ž„์„ ์•Œ์•„๋‘์ž.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ญ์‹œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜์–ด ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์ฐธ์กฐ์—์˜ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋™์ž‘ํ•ด ์ „๋‹ฌํ•œ ์ธ์ˆ˜ ๋ณ€๊ฒฝ ์‹œ ๋ถ€์ˆ˜ํšจ๊ณผ์˜ ์œ ๋ฌด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์žฅ

#๐Ÿ“‘Study Source

  1. ์ฑ… - ๋”ฅ๋‹ค์ด๋ธŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ