[JavaSciprt] ํ•จ์ˆ˜

22877 ๋‹จ์–ด JavaScriptJavaScript

ํ•จ์ˆ˜(Function)

1. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ (Function Declaration)

function ํ‚ค์›Œ๋“œ, ํ•จ์ˆ˜์ด๋ฆ„, ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐจ๋ก€๋กœ ์จ์ฃผ๋ฉด ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ํ•จ์ˆ˜์—๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ, ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋‹ค๋ฉด ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด์ค€๋‹ค.

function showMessage() {
  alert('hi!');
}

2. ์ง€์—ญ ๋ณ€์ˆ˜(local variable)

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ธ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ex)

function showMessage(){
  let message = 'hi!'; // local variable
  alret(message);
}
showMessage(); // hi!
alert(message) // ReferenceError : message is not defined.

3. ์ „์—ญ ๋ณ€์ˆ˜

  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜์ธ ์ „์—ญ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
let userName= 'John';
function showMessage() {
  let message = 'Hello, ' + userName;
  alert(message);
}

showMessage(); // Hello, John
  • ํ•จ์ˆ˜์—์„œ ์ „์—ญ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š”๊ฒƒ๋ฟ ์•„๋‹ˆ๋ผ, ์ˆ˜์ •๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
let userName= 'John';
function showMessage() {
  userName = 'Bob' // ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •
  let message = 'Hello, ' + userName;
  alert(message);
}

alert(userName); // ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์ด๋ฏ€๋กœ John์ด ์ถœ๋ ฅ๋จ

showMessage(); // Hello, John

alert(userName); // ํ•จ์ˆ˜์— ์˜ํ•ด Bob์œผ๋กœ ๊ฐ’์ด ๋ฐ”๋€œ
  • ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ „์—ญ ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์–ด์žˆ๋‹ค๋ฉด, ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฐ๋‹ค.
let userName = 'John';

function showMessage() {
  let userName = "Bob"; // ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

  let message = 'Hello, ' + userName; // Bob
  alert(message);
}

// ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜์ธ userName๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค,
showMessage();

alert( userName ); // ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , John์ด ์ถœ๋ ฅ ๋œ๋‹ค.

์ „์—ญ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ง€์—ญ ๋ณ€์ˆ˜์— ์˜ํ•ด ๊ฐ€๋ ค์ง€์ง€๋งŒ ์•Š๋Š”๋‹ค๋ฉด ๋ชจ๋“  ํ•จ์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜๋Š” ์—ฐ๊ด€๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธํ•˜๊ณ , ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๋˜๋„๋ก ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋‹ค๋งŒ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ „์—ญ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š”๊ฒƒ์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

4. ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ์ˆ˜ ์•ˆ์— ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

function showMessage(from, text) {
  alert(from +': ' + text);
}

showMessage('Jin', 'Hi!'); // Jin: Hi!
showMessage('Jin', "What's up?"); // Jin: What's up?

๊ธฐ๋ณธ๊ฐ’

๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ๋ฐฉ๋ฒ• 1

๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๊ฐ’์€ undefined๊ฐ€ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์ฝ”๋“œ์—์„œ showMessage('Ahn'); ์„ ์ž…๋ ฅํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  Ahn: undefined๊ฐ€ ์ถœ๋ ฅ ๋œ๋‹ค. ์ด ๋•Œ, undefined ๊ฐ’์ด ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

function showMessage(from, text='no text given'){
  alert(from+": "+text);
}

showMessage('Ahn'); // Ahn: no text given

๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ๋ฐฉ๋ฒ•2

๊ฐ€๋” ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋Š”๊ฒƒ ๋Œ€์‹  ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋Š”๊ฒŒ ๋…ผ๋ฆฌ์— ๋งž๋Š”๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ undefined์™€ ๋น„๊ตํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ƒ๋žต๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • if๋ฌธ ์‚ฌ์šฉ
  • || ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
  • null ์‚ฌ์šฉ

// 1. if๋ฌธ
function showMessage(text){
  if (text === undefined){
    text = 'empty';
  }
  alert(text);
}

showMessage(); // empty


// 2. ||

function showMessage(text){
  text = text || 'empty';
  ...
}
  
// 3. null

function showCount(count){
  alert(count ?? 'unknown');
}
  
showCount(0); //0
showCount(null); // unknown
showcount(); // unknown

5. ๋ฐ˜ํ™˜ ๊ฐ’

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ทธ๊ณณ์— ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ ๊ฐ’์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

return์€ ํ•จ์ˆ˜ ๋‚ด ์–ด๋””์„œ๋“  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์‹คํ–‰ ํ๋ฆ„์ด ์ง€์‹œ์ž return์„ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰์€ ์ฆ‰์‹œ ์ค‘๋‹จ ๋˜๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์— ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋˜ ํ•จ์ˆ˜ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ return๋ฌธ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

function checkAge(age){
  if ( age >= 18 ){
    return true;
  } else {
    return confirm('are you sure?');
  }
}

let age = prompt('how old are you?', 18);

if ( checkAge(age) ){
  alert('Good');
} else{
  alert('Nope');
}
  • return๋ฌธ์ด ์—†๊ฑฐ๋‚˜ return ์ง€์‹œ์ž๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์— undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
function doNothin() {
  return;
}

alert( doNothing() === undefined); // true
  • return ์ง€์‹œ๋ฌธ์€ return๋ฌธ ๋์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ์ž๋™์œผ๋กœ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ์ค„์„ ์ž‘์„ฑ ํ•  ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ์„ ํ•ด์•ผ๋œ๋‹ค
return (
  some + long + expression
  + or +
  whatever * f(a) + f(b)
  )

6. ํ•จ์ˆ˜ ์ด๋ฆ„ ์ง“๊ธฐ

ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๊ฐ€๋Šฅํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•ด์•ผ ํ•œ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ๋„๋ก. ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ๋ณด๊ณ ๋„ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๋Š”์ง€ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์ถ•์•ฝํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๋™์‚ฌ๋ฅผ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋งŒ๋“œ๋Š”๊ฒŒ ๊ด€์Šต์ด๋‹ค.

  • get - ๊ฐ’์„ ๋ฐ˜ํ™˜ ํ•จ
  • calc - ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ณ„์‚ฐํ•จ
  • create - ๋ฌด์–ธ๊ฐ€๋ฅผ ์ƒ์„ฑํ•จ
  • check - ๋ฌด์–ธ๊ฐ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถˆ๋ฆฐ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ

ํ•จ์ˆ˜๋Š” ๋™์ž‘ ํ•˜๋‚˜๋งŒ ๋‹ด๋‹นํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์— ์–ธ๊ธ‰๋˜์–ด ์žˆ๋Š” ๋™์ž‘์„ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
์†ํ•œ ํŒ€์—์„œ ์ ‘๋‘์–ด ์˜๋ฏธ๋ฅผ ์žฌํ•ฉ์˜ ํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ง€์„๋•Œ๋Š” ํ•ด๋‹น ์ ‘๋‘์–ด์— ์–ด๋–ค ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜ == ์ฃผ์„

ํ•จ์ˆ˜๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ , ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
ํ•จ์ˆ˜๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ํ•จ์ˆ˜๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐค ๋•Œ๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ์‹ ํ˜ธ!

ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง€๊ณ  ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋กœ ์ฃผ์„์˜ ์—ญํ• ๊นŒ์ง€ ํ•œ๋‹ค!

// 1๋ฒˆ
function showPrimes(n) {
  nextPrime: for (let i = 2; i < n; i++) {
    for (let j = 2; j < i; j++ ) {
      if (i % j ==0) continue nextPrime;
    }
    
    alert(i); // ์†Œ์ˆ˜
  }
}

// 2๋ฒˆ
function showPrimes(n) {
  
  for (let i = 2; i < n; i++) {
    if (!isPrime(i)) continue;
    
    alert(i); // ์†Œ์ˆ˜
  }
}

function isPrime(n){
  for (let i ==2; i < n; i++) {
    if (n % i ==0) return false;
  }
  return true;
}

๋‘๋ฒˆ์งธ๊ฐ€ ํ›จ์”ฌ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’๋‹ค. isPrime ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋ณด๊ณ  ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์†Œ์ˆ˜์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋™์ž‘์„ ํ•œ๋‹ค๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ด๋ฆ„๋งŒ ๋ณด๊ณ  ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž๊ธฐ ์„ค๋ช…์ (self-describing)์ฝ”๋“œ ๋ผ๊ณ  ํ•œ๋‹ค.

์ž๋ฃŒ ์ถœ์ฒ˜ : https://ko.javascript.info

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ