Javascript 5일차 함수(function)

2025. 12. 23. 19:38대우개발원 수업 내용/Javascript

반응형

개념 내용 요약10장 함수(Function)

더보기

10.1 함수란

함수(function)

  • 어떤 목적을 가지고 작성한 코드를 모아 둔 블록문
  • 여러 줄의 코드를 하나의 단위로 묶어 재사용 가능

함수를 정의한다

  • function 키워드, 식별자, 소괄호, 블록문을 사용해 함수를 생성하는 것

함수를 정의하면

  • 코드를 새로 작성하지 않고 정의한 함수를 호출하여 사용 가능
  • 코드 수정 및 관리가 쉬워 유지 보수에 유리

10.2 함수를 정의하는 방법

1. 함수 선언문으로 함수 정의하기

  • function 키워드를 사용해 함수를 정의하는 방법
function 함수명() {
}

특징

  • 가장 기본적인 함수 정의 방식
  • 함수 호이스팅의 영향을 받음

2. 함수 표현식으로 함수 정의하기

  • 함수를 변수에 할당해 정의하는 방법

네이밍 함수

  • 변수에 할당된 함수에 식별자가 있는 경우
const 변수명 = function 함수명() {
};

익명 함수

  • 변수에 할당된 함수에 식별자가 없는 경우
const 변수명 = function () {
};

3. 화살표 함수로 함수 정의하기

  • ES6에서 추가된 함수 정의 방식
  • 익명 함수로만 정의 가능
const 함수명 = () => {
};

특징

  • 코드가 간결함
  • 기존 함수와 this 처리 방식이 다름

10.3 함수 기능 확장하기

1. 매개변수와 인수

매개변수(parameter)

  • 함수가 호출될 때 전달받은 데이터를 저장하기 위해 함수에 선언하는 변수

인수(argument)

  • 정의한 함수를 호출할 때 전달하는 실제 데이터

형식

// 함수 선언문
function 함수명(매개변수1, 매개변수2, ..., 매개변수N) {
}

// 함수 표현식
const 함수명 = function(매개변수1, ..., 매개변수N) {
};

// 화살표 함수
const 함수명 = (매개변수1, 매개변수2, ..., 매개변수N) => {
};

// 함수 호출
함수명(인수1, 인수2, ..., 인수N);

2. 매개변수의 특징

데이터 전달

  • 매개변수를 정의하지 않으면 전달한 데이터는 할당되지 않음
  • 오류는 발생하지 않음
  • 전달된 인수와 매개변수는 일대일 대응 관계

매개변수의 기본값

  • 전달받지 못한 매개변수의 값은 undefined

 

 


 


※ 해당 예제는 로컬 환경(localhost)에서 실행한 결과입니다. 실행 코드는 아래를 참고해주세요.



구구단3단

function으로 변경

function.js

더보기
// // 기본 for문을 사용하는 구구단 3단
// for(let i =1; i <= 9; i++){
//   console.log(`3 * ${i} = ${3 * i}`)
// }

// function gugudan(){ // 함수 시작 3단 구구단
//   for(let i =1; i <= 9; i++){
//     console.log(`3 * ${i} = ${3 * i}`);
//   }
// } // 함수 끝
// 위 까지가 함수 정의

function gugudan(){ // 함수 시작 1~9단 구구단
  for(let i =1; i <= 9; i++){
    console.log(`${i} 단`);
    for(j = 1; j <= 9; j++)
      console.log(`${i} * ${j} = ${i * j}`);
  }
}
gugudan(); // 함수 호출
gugudan();

실행결과

1 단
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
1 단
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

function.js

함수 정리

더보기

1. 기본 for문을 사용하는 구구단 (함수 X)

for(let i = 1; i <= 9; i++){
  console.log(`3 * ${i} = ${3 * i}`);
}

설명

  • 함수 없이 반복문만 사용
  • 실행할 때마다 같은 코드를 다시 작성해야 함
  • 재사용성 낮음

2. 함수 선언문으로 3단 구구단 만들기

function gugudan(){   // 함수 정의
  for(let i = 1; i <= 9; i++){
    console.log(`3 * ${i} = ${3 * i}`);
  }
}

gugudan();   // 함수 호출

설명

  • function 키워드를 사용한 함수 선언문
  • gugudan()을 호출할 때만 실행됨
  • 코드 재사용 가능

3. 함수 선언문으로 1~9단 전체 구구단

function gugudan(){
  for(let i = 1; i <= 9; i++){
    console.log(`${i} 단`);
    for(let j = 1; j <= 9; j++){
      console.log(`${i} * ${j} = ${i * j}`);
    }
  }
}

gugudan();

설명

  • 중첩 for문 사용
  • 하나의 함수로 전체 구구단 출력
  • 함수 내부 변수는 지역 변수

4. 함수 표현식 (네이밍 함수)

const gugudan = function gugudan(){
  for (let i = 1; i <= 9; i++){
    console.log(`3 * ${i} = ${3 * i}`);
  }
};

gugudan();

설명

  • 함수 표현식 방식
  • gugudan → 변수명 (외부 호출용)
  • 내부 함수 이름은 디버깅·재귀용
  • 호출은 반드시 gugudan()으로 함

5. 네이밍 함수 (식별자 다르게 사용)

const gugudan = function naming(){
  for (let i = 1; i <= 9; i++){
    console.log(`3 * ${i} = ${3 * i}`);
  }
};

gugudan();

설명

  • naming은 함수 내부 전용 이름
  • 외부에서는 호출 불가
  • 함수 표현식의 특징을 보여주는 예제

6. 익명 함수로 함수 정의하기

const gugudan = function(){
  for (let i = 1; i <= 9; i++){
    console.log(`3 * ${i} = ${3 * i}`);
  }
};

gugudan();

설명

  • 함수에 이름이 없음
  • 변수명으로만 함수 관리
  • 가장 일반적인 함수 표현식 형태

7. 화살표 함수로 함수 정의하기

const gugudan = () => {
  for (let i = 1; i <= 9; i++){
    console.log(`3 * ${i} = ${3 * i}`);
  }
};

gugudan();

설명

  • ES6에서 추가된 화살표 함수
  • 항상 익명 함수
  • 문법이 간결함

8. 매개변수(parameter)와 인수(argument) 예제

function sum(num1, num2){   // 매개변수
  let result = num1 + num2;
  console.log("inner:" + result);
}

sum(10, 20);   // 인수

설명

  • num1, num2 → 매개변수(parameter)
  • 10, 20 → 인수(argument)
  • 인수 값이 매개변수에 1:1로 전달됨

9. 매개변수를 사용한 구구단 (n단 출력)

const gugudan = (dan) => {   // 매개변수
  for (let i = 1; i <= 9; i++){
    console.log(`${dan} * ${i} = ${dan * i}`);
  }
};

gugudan(5);   // 인수

설명

  • dan에 전달된 값이 저장됨
  • gugudan(5) → 5단 출력
  • 매개변수 + 인수의 올바른 사용 예

10. 매개변수 기본값 사용

function sum(a = 10, b = 10){
  console.log(a, b);
}

sum(50);

실행 결과

50 10

설명

  • 매개변수에 기본값 설정
  • 인수를 하나만 전달하면
    • a = 50
    • b = 10 (기본값 사용)

핵심 개념 요약

구분설명
함수 선언문 function 함수명()
함수 표현식 const 변수 = function()
네이밍 함수 함수 내부 이름 존재
익명 함수 함수 이름 없음
화살표 함수 () => {}
매개변수 값을 받을 변수
인수 전달하는 실제 값
기본값 인수 없을 때 사용

 

calcSum.html

더보기

http://localhost:52330/js5/calcSum.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1부터 n까지 더하기</title>
</head>
<body>
  <script>
  let userNumber = parseInt(prompt("얼마까지 더할까요?"));
  calcSum(userNumber);
  
    function calcSum(n) { // function 문을 제일 먼저 읽기 때문에 위에서 부터 읽는다는것을 생각안해도 된다.
      let sum = 0;
      for(let i = 1; i <= n; i++){
        sum += i;
      }
      document.write("1부터 " + n + "까지 더하면 " + sum);
    }

  </script>
</body>
</html>

 

fx_gugudan.html

더보기

http://localhost:52330/js5/fx_gugudan.html

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>구구단 함수</title>
  <style>
    div {
      border: 1px solid #ccc;
      display: inline-block;
      padding: 0 20px 30px 20px;
      margin: 15px;
      line-height: 2;
    }
    div h3 {
      text-align: center;
      font-weight: bold;
    }
  </style>
</head>
<body>
  <script>
    var num = prompt("구구단 몇 단을 원하세요", ""); // n은 문자열
    gugudan(num); // 함수 호출

    function gugudan(n) {
      var m = parseInt(n); // 문자열 n을 숫자로 바꿈

      if(isNaN(m) || m < 1 || m > 9) { 
        alert("잘못입력하셨습니다.");
        // return;
      }
      
      document.write("<div>");
      document.write("<h3>" + m + "단</h3>");
      for(let j = 1; j <= 9; j++) {
        document.write(m +" X " + j + " = " + m*j + "<br>");
      }
      document.write("</div>");
    }
      
  </script>
</body>
</html>

<!-- if(isNaN(m) || m < 1 || m > 9) { 
  alert("잘못입력하셨습니다.");
  return;
} -->