IT곡뢀일기
article thumbnail

πŸ’‘ ν•¨μˆ˜(Function)λž€?

μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ‹€ν–‰ λ¬Έμž₯듀을 μ§‘ν•©ν•˜μ—¬ μ •μ˜ν•œ μ½”λ“œ λΈ”λ‘μž…λ‹ˆλ‹€.

ν•¨μˆ˜μ˜ μž₯점은 ν”„λ‘œκ·Έλž¨μ—μ„œ νŠΉμ • μž‘μ—…μ„ μ—¬λŸ¬ 번 λ°˜λ³΅ν•΄μ•Ό ν•  λ•Œ, ν•΄λ‹Ή μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜ ν•˜λ‚˜λ§Œ λ§Œλ“€κ²Œ 되면

κΈ°λŠ₯을 또 κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ°λ§Œ ν•˜λ©΄ λ˜‘κ°™μ€ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, ν•¨μˆ˜λŠ” μ—¬λŸ¬ 번 ν˜ΈμΆœν•  수 있기 λ•Œλ¬Έμ— μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… ν•¨μˆ˜(Function)의 μ •μ˜

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” function ν‚€μ›Œλ“œλ‘œ μ‹œμž‘ν•˜μ—¬ ν•¨μˆ˜μ΄λ¦„ () {  } ꡬ쑰둜 μ„ μ–Έν•©λ‹ˆλ‹€.

// ν•¨μˆ˜ μ„ μ–Έ
function ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2) {
  // μ‹€ν–‰λ¬Έμž₯
}

ν•¨μˆ˜μ΄λ¦„(인수1, 인수2); // ν•¨μˆ˜ 호좜

1) ν•¨μˆ˜μ΄λ¦„ : ν•¨μˆ˜ μ΄λ¦„λ§Œ 보고도 μ–΄λ–€ κΈ°λŠ₯을 ν•˜λŠ”μ§€ 힌트λ₯Ό 얻을 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

    - 문자, 숫자, 밑쀄( _ ), λ‹¬λŸ¬κΈ°ν˜Έ( $ )λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. (이 밖에도 λͺ…λͺ… κ·œμΉ™μ΄ 더 있음)

 

2) λ§€κ°œλ³€μˆ˜(Parameter) : ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ „λ‹¬λœ κ°’(인수1, 인수2...)을 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ €μž₯, μ‚¬μš©ν•˜λŠ” λ³€μˆ˜μž…λ‹ˆλ‹€.

 

3) 인수(Argument) : ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜λ‘œ κ±΄λ„€μ£ΌλŠ” λ³€μˆ˜ λ˜λŠ” μƒμˆ˜μž…λ‹ˆλ‹€.

-> 즉, λ§€κ°œλ³€μˆ˜1 = 인수1, λ§€κ°œλ³€μˆ˜2 = 인수2와 λ™μΌν•œ λ§μž…λ‹ˆλ‹€.


- 두 수λ₯Ό λ°›μ•„ λ”ν•΄μ£ΌλŠ” ν•¨μˆ˜ 예제

βœ” 두 수λ₯Ό λ°›μ•„ λ”ν•΄μ£ΌλŠ” ν•¨μˆ˜ 예제λ₯Ό ν†΅ν•΄μ„œ μžμ„Ένžˆ μ•Œμ•„λ΄…μ‹œλ‹€.

function addNumber(x, y) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (x + y));
}

addNumber(2, 3);  // μ‹€ν–‰κ²°κ³Ό : λ‘˜μ„ λ”ν•œ 값은 5

1) ν•¨μˆ˜μ˜ 이름은 addNumberμž…λ‹ˆλ‹€.

2) addNumber ν•¨μˆ˜λŠ” 2개의 λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 λ§€κ°œλ³€μˆ˜μ˜ 이름은 각각 x, y라고 μ •ν–ˆμŠ΅λ‹ˆλ‹€.

3) addNumber(2, 3); 으둜 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν–ˆμŠ΅λ‹ˆλ‹€.

   -> x = 2, y = 3μ΄λΌλŠ” 값이 μ „λ‹¬λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 'λ‘˜μ„ λ”ν•œ 값은 5' λΌλŠ” 결괏값이 λ‚˜μ˜΅λ‹ˆλ‹€.


πŸ’‘ λ§Œμ•½ λ§€κ°œλ³€μˆ˜μ™€ 인수 λ‘˜ λ‹€ μ—†λ‹€λ©΄?

-> 결둠은 '아무 이상 μ—†λ‹€' μž…λ‹ˆλ‹€.

function addNumber() {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (2 + 3));
}

addNumber();  // μ‹€ν–‰κ²°κ³Ό : λ‘˜μ„ λ”ν•œ 값은 5

이런 μ‹μœΌλ‘œ λ§€κ°œλ³€μˆ˜μ™€ μΈμˆ˜κ°€ 없어도 (2 + 3)μ΄λΌλŠ” λ¬Έμž₯을 λ„£μ–΄μ£ΌκΈ°λ§Œ ν•˜λ©΄ μ‹€ν–‰ κ²°κ³ΌλŠ” λ™μΌν•œ 값이 좜λ ₯λ©λ‹ˆλ‹€.

 

πŸ’‘ λ§Œμ•½ λ§€κ°œλ³€μˆ˜λŠ” μžˆμ§€λ§Œ μΈμˆ˜κ°€ μ—†λ‹€λ©΄?

πŸ€” 그런데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ λ§€κ°œλ³€μˆ˜λŠ” μžˆμ§€λ§Œ μΈμˆ˜κ°€ μ—†λ‹€λ©΄ 무슨 λ¬Έμ œκ°€ μƒκΈΈκΉŒμš”?

function addNumber(x, y) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (x + y));
}

addNumber();

λ‹€ν–‰νžˆ μ½˜μ†” μ°½μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ κ²°κ΄κ°’μœΌλ‘œ NaN(Not a Number의 μ•½μž)μ΄λΌλŠ” 값이 좜λ ₯λ˜λŠ”λ°μš”.

μ΄λŠ” μˆ˜ν•™μ μœΌλ‘œ 정상적인 연산이 λΆˆκ°€ν•˜μ§€λ§Œ μ–΅μ§€λ‘œ 연산이 μ΄λ£¨μ–΄μ§ˆ 경우 μ΄λŸ¬ν•œ 값이 μ‚°μΆœλ©λ‹ˆλ‹€.

x와 y에 값을 λ„£μ–΄μ£Όμ§€ μ•Šμ€ μƒνƒœμ—μ„œ 이 λ‘˜μ„ λ”ν•˜λ €κ³  ν•˜λ‹ˆ 이런 κ²°κ³Όκ°€ λ‚˜μ˜¨ 것은 μ–΄μ°Œ 보면 λ‹Ήμ—°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

(λ¬Όλ‘  x와 yλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 아무 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.)

function addNumber(x, y) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (2 + 3));
}

addNumber();   // μ‹€ν–‰κ²°κ³Ό : λ‘˜μ„ λ”ν•œ 값은 5

 


βœ… NaN의 해결방법 - λ§€κ°œλ³€μˆ˜ κΈ°λ³Έκ°’ μ§€μ •

인수둜 값을 λ„˜κ²¨μ€˜μ•Ό λ§€κ°œλ³€μˆ˜μ— ν•΄λ‹Ή 값이 μ €μž₯이 λ˜μ–΄ μ‚¬μš©μ΄ κ°€λŠ₯ν•œλ°

인수둜 값을 λͺ» λ„˜κ²¨μ€€ μƒνƒœμ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ NaN이 λ°œμƒν–ˆμ—ˆμ£ ?

 

인수둜 λͺ» λ„˜κ²¨μ€˜λ„ λ§€κ°œλ³€μˆ˜ 기본값을 μ§€μ •ν•΄μ£Όλ©΄ κ·Έ 기본값을 μ‚¬μš©ν•˜λ©΄ λ˜λ‹ˆκΉŒ NaN이 λ°œμƒν•  일이 없을텐데 말이죠.

λ‹€ν–‰νžˆ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ§€κ°œλ³€μˆ˜μ— 기본값을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

function addNumber(x = 2, y = 3) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (x + y));
}

addNumber();  // μ‹€ν–‰κ²°κ³Ό : λ‘˜μ„ λ”ν•œ 값은 5

μ΄λŸ°μ‹μœΌλ‘œ λ§€κ°œλ³€μˆ˜ () μ•ˆμ— x = 2, y = 3이라고 λͺ…μ‹œλ₯Ό ν•˜κ²Œ λœλ‹€λ©΄

addNumber(); 호좜 μ‹œ μΈμˆ˜κ°€ 없더라도 기본값인 2와 3이 λ“€μ–΄μžˆμ–΄ 같은 결괏값을 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

(λ§€κ°œλ³€μˆ˜μ— μΈμˆ˜κ°’μ„ μ€€λ‹€κ³  ν•˜λ©΄ λ‹Ήμ—°νžˆ 기본값이 μ•„λ‹Œ μΈμˆ˜κ°’μ΄ λ“€μ–΄κ°‘λ‹ˆλ‹€.)

function addNumber(x = 2, y = 3) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (x + y));
}

addNumber(3, 5);  // μ‹€ν–‰κ²°κ³Ό : λ‘˜μ„ λ”ν•œ 값은 8

 


βœ… ν•¨μˆ˜μ—μ„œ return μ‚¬μš©ν•˜κΈ°

ν•¨μˆ˜μ—μ„œ μ›ν•˜λŠ” 결괏값을 κ³„μ‚°ν•œ ν›„ ν•΄λ‹Ή 결괏값을 λ°›κ³  싢을 λ•Œ λ˜λŠ”

ν•¨μˆ˜μžμ²΄λ₯Ό κ°•μ œλ‘œ μ’…λ£Œμ‹œν‚€κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œκ°€ returnμž…λ‹ˆλ‹€!

 

1) μ›ν•˜λŠ” 결괏값을 λ°›κ³  싢을 λ•Œ

function addNumber(x, y) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (2 + 3));
  return x + y;
}

var sum = addNumber(3, 5);
console.log("ν•¨μˆ˜μ˜ return 값은 " + sum);

μ§€κΈˆκΉŒμ§€μ™€ λ‹€λ₯Έ 점이라면 return을 μΌλ‹€λŠ” 것과 ν•¨μˆ˜λ₯Ό 호좜 μ‹œν‚¬ λ•Œ λ³€μˆ˜μ— μ €μž₯ν•˜κ³  있죠?

곡톡점이라면 ν˜ΈμΆœν•΄μ„œ x = 3, y = 5λ₯Ό μ§‘μ–΄λ„£μ—ˆκ³  μ½˜μ†”μ— 2 + 3을 ν–ˆμœΌλ‹ˆκΉŒ 'λ‘˜μ„ λ”ν•œ 값은 5' κ°€ 좜λ ₯λ˜μ—ˆλ‹€λŠ” κ²ƒκΉŒμ§€λŠ” μ•Œκ² μŠ΅λ‹ˆλ‹€.

 

그런데 return x + yλŠ” λ¬΄μ—‡μΌκΉŒμš”?

x + y = 3 + 5 = 8μ΄λΌλŠ” 것은 μ•Œ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

κ²°λ‘ ) return을 μ“°κ²Œ 되면 x + yλΌλŠ” 값을 ν•¨μˆ˜ λ°–μ—μ„œλ„ μ‚¬μš©μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

 

이 ν•¨μˆ˜λŠ” 두 수λ₯Ό λ°›μ•„ λ”ν•˜λ©΄ 일이 λλ‚©λ‹ˆλ‹€.

그런데 μ œκ°€ μ›ν•˜λŠ” 것은 ν•¨μˆ˜λ°–μ—μ„œ λ”ν•œ 결괏값을 μ“°κ³  μ‹Άλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜ x와 yλŠ” ν•¨μˆ˜λ‚΄μ—μ„œλ§Œ μ“Έ 수 μžˆλŠ” μ§€μ—­λ³€μˆ˜μž…λ‹ˆλ‹€. ν•¨μˆ˜ λ°–μ—μ„œλŠ” μ‚¬μš© ν•  수 μ—†μ£ .

μ΄λŠ” x와 yλ₯Ό ν•¨μˆ˜ λ°–μ—μ„œ κ°€μ§€κ³  μ™€μ„œ λ§μ…ˆμ„ μ‹œν‚¬ 수 μ—†λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒμš”?

 

그럴 λ•Œ μ“°λŠ” 것이 λ°”λ‘œ return μž…λ‹ˆλ‹€.

return을 μ“°κ²Œ 되면 ν•¨μˆ˜ λ°– -> ν•¨μˆ˜λ₯Ό ν˜ΈμΆœμ‹œν‚¨ 곳에 λ”ν•œ 값을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ κ³³μ—μ„œ λ”ν•œ 값을 λ°›λŠ” 것이고 이λ₯Ό μ“°λ €λ©΄ λ‹Ήμ—°νžˆ λ³€μˆ˜μ— μ €μž₯을 μ‹œμΌœμ•Ό ν•˜κΈ° λ•Œλ¬Έμ—

var sum = addNumber(3, 5); λ₯Ό μ“΄ κ²ƒμ΄λžλ‹ˆλ‹€.

 

이제 그럼 ν•¨μˆ˜κ°€ μ•„λ‹Œ λ‹€λ₯Έ κ³³μ—μ„œ sumμ΄λΌλŠ” λ³€μˆ˜λ§Œ 있으면 ν•¨μˆ˜μ˜ 결괏값을 μ–΄λ””μ„œλ“ μ§€ 뢈러올 수 있게 λ©λ‹ˆλ‹€.

 

return은 이 역할이 끝인쀄 μ•Œμ•˜μœΌλ‚˜ ν•œ κ°€μ§€ 일이 더 μžˆμŠ΅λ‹ˆλ‹€.

 

2) ν•¨μˆ˜ 자체λ₯Ό κ°•μ œμ’…λ£Œ

function addNumber(x, y) {
  console.log("λ‘˜μ„ λ”ν•œ 값은 " + (2 + 3));
  return x + y;
  console.log("1 + 2 = " + (1 + 2));
}

var sum = addNumber(3, 5);
console.log("ν•¨μˆ˜μ˜ return 값은 " + sum);

방금 썼던 μ½”λ“œμ—μ„œ return된 ν›„ λ‹€μ‹œ μ½˜μ†”μ„ ν”„λ¦°νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰ν•΄λ³΄μ‹œλ©΄ μ•Œκ² μ§€λ§Œ μ½˜μ†”μ— 어디에도 1 + 2 = 3μ΄λΌλŠ” ν”„λ¦°νŠΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.

 

이가 μ˜λ―Έν•˜λŠ” λ°”λŠ” returnλ¬Έ 뒀에 온 λͺ¨λ“  λ¬Έμž₯듀은 싀행이 μ•ˆ λ˜μ—ˆλ‹€λŠ” 것을 μ•Œ 수 있죠.

즉, returnμ΄λΌλŠ” λ¬Έμž₯이 μ‹€ν–‰λ˜μžλ§ˆμž ν•¨μˆ˜λŠ” μ’…λ£Œκ°€ λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

뒀에 무슨 λ¬Έμž₯듀이 μ˜€λ˜μ§€ 상관없이 κ°•μ œμ’…λ£Œμ‹œν‚΅λ‹ˆλ‹€.

 


μ§€κΈˆκΉŒμ§€ ν•¨μˆ˜μ˜ 기본적인 원리와 μ‚¬μš©λ²•μ— λŒ€ν•΄ λ°°μ› μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ :)