본문 바로가기
  • 코딩, 허쌤이 떠먹여 줄게
FrontEnd/Javascript

8장. 함수

by 허쌤 2026. 1. 8.

8장. 함수

함수란?

함수(Function)는 특정 작업을 수행하는 코드 블록입니다. 함수는 재사용 가능하며, 코드를 모듈화하여 가독성과 유지보수성을 높입니다.

함수의 장점

  • 코드 재사용: 같은 코드를 여러 번 작성하지 않아도 됨
  • 모듈화: 기능별로 코드를 분리
  • 가독성 향상: 코드의 의도가 명확해짐
  • 유지보수 용이: 한 곳만 수정하면 모든 곳에 반영

1. 함수 선언 (Function Declaration)

가장 기본적인 함수 선언 방법입니다.

기본 형식

function 함수명(매개변수1, 매개변수2, ...) {
    // 실행할 코드
    return 반환값;  // 선택사항
}

예제 1: 간단한 함수

function greet() {
    console.log('안녕하세요!');
}

greet();  // 함수 호출

실행 결과

안녕하세요!

예제 2: 매개변수가 있는 함수

function greet(name) {
    console.log(`안녕하세요, ${name}님!`);
}

greet('홍길동');
greet('김철수');

실행 결과

안녕하세요, 홍길동님!
안녕하세요, 김철수님!

예제 3: 반환값이 있는 함수

function add(a, b) {
    return a + b;
}

let result = add(3, 5);
console.log(result);  // 8

예제 4: 여러 매개변수

function introduce(name, age, city) {
    return `이름: ${name}, 나이: ${age}, 거주지: ${city}`;
}

let info = introduce('홍길동', 25, '서울');
console.log(info);

실행 결과

이름: 홍길동, 나이: 25, 거주지: 서울

2. 함수 표현식 (Function Expression)

함수를 변수에 할당하는 방식입니다.

기본 형식

const 함수명 = function(매개변수1, 매개변수2, ...) {
    // 실행할 코드
    return 반환값;
};

예제

const greet = function(name) {
    return `안녕하세요, ${name}님!`;
};

console.log(greet('홍길동'));

함수 선언 vs 함수 표현식

// 함수 선언: 호이스팅됨 (선언 전에 호출 가능)
sayHello();  // ✅ 동작함

function sayHello() {
    console.log('Hello');
}

// 함수 표현식: 호이스팅 안 됨 (선언 후에만 호출 가능)
// sayHi();  // ❌ 오류!

const sayHi = function() {
    console.log('Hi');
};

sayHi();  // ✅ 동작함

3. 화살표 함수 (Arrow Function) - ES6+

간결한 함수 표현 방법입니다.

기본 형식

const 함수명 = (매개변수1, 매개변수2, ...) => {
    // 실행할 코드
    return 반환값;
};

예제 1: 기본 사용

const greet = (name) => {
    return `안녕하세요, ${name}님!`;
};

console.log(greet('홍길동'));

예제 2: 간단한 형태 (단일 표현식)

// 중괄호와 return 생략 가능
const add = (a, b) => a + b;

console.log(add(3, 5));  // 8

예제 3: 매개변수가 하나일 때

// 괄호 생략 가능
const square = x => x * x;

console.log(square(5));  // 25

예제 4: 매개변수가 없을 때

const sayHello = () => {
    return 'Hello';
};

// 또는
const sayHi = () => 'Hi';

화살표 함수 vs 일반 함수

// 일반 함수
function add1(a, b) {
    return a + b;
}

// 화살표 함수
const add2 = (a, b) => a + b;

// 둘 다 같은 결과
console.log(add1(3, 5));  // 8
console.log(add2(3, 5));  // 8

4. 매개변수와 인수

매개변수 (Parameter)

함수 정의 시 사용하는 변수입니다.

function greet(name) {  // name은 매개변수
    console.log(`안녕하세요, ${name}님!`);
}

인수 (Argument)

함수 호출 시 전달하는 실제 값입니다.

greet('홍길동');  // '홍길동'은 인수

기본값 (Default Parameters) - ES6+

매개변수에 기본값을 설정할 수 있습니다.

function greet(name = '익명') {
    console.log(`안녕하세요, ${name}님!`);
}

greet('홍길동');  // "안녕하세요, 홍길동님!"
greet();          // "안녕하세요, 익명님!"

나머지 매개변수 (Rest Parameters) - ES6+

여러 인수를 배열로 받을 수 있습니다.

function sum(...numbers) {
    let total = 0;
    for (let num of numbers) {
        total += num;
    }
    return total;
}

console.log(sum(1, 2, 3));        // 6
console.log(sum(1, 2, 3, 4, 5));  // 15

5. 반환값 (Return)

함수는 return 문을 통해 값을 반환할 수 있습니다.

return 문 사용

function add(a, b) {
    return a + b;  // 값을 반환하고 함수 종료
}

let result = add(3, 5);
console.log(result);  // 8

return이 없는 함수

function greet(name) {
    console.log(`안녕하세요, ${name}님!`);
    // return이 없으면 undefined 반환
}

let result = greet('홍길동');
console.log(result);  // undefined

여러 return 문

function checkAge(age) {
    if (age >= 18) {
        return '성인';
    } else {
        return '미성년자';
    }
}

console.log(checkAge(20));  // '성인'
console.log(checkAge(15));  // '미성년자'

6. 함수의 다양한 사용 예제

예제 1: 계산기 함수

function calculator(a, b, operation) {
    if (operation === '+') {
        return a + b;
    } else if (operation === '-') {
        return a - b;
    } else if (operation === '*') {
        return a * b;
    } else if (operation === '/') {
        return a / b;
    } else {
        return '알 수 없는 연산';
    }
}

console.log(calculator(10, 5, '+'));  // 15
console.log(calculator(10, 5, '-'));  // 5
console.log(calculator(10, 5, '*')); // 50
console.log(calculator(10, 5, '/'));  // 2

예제 2: 등급 판정 함수

function getGrade(score) {
    if (score >= 90) {
        return 'A';
    } else if (score >= 80) {
        return 'B';
    } else if (score >= 70) {
        return 'C';
    } else {
        return 'F';
    }
}

console.log(getGrade(95));  // 'A'
console.log(getGrade(85));  // 'B'
console.log(getGrade(65));  // 'F'

예제 3: 배열 처리 함수

function findMax(numbers) {
    let max = numbers[0];
    for (let i = 1; i < numbers.length; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }
    return max;
}

let numbers = [5, 12, 8, 130, 44];
console.log(findMax(numbers));  // 130

예제 4: 화살표 함수로 배열 메서드

let numbers = [1, 2, 3, 4, 5];

// 각 요소를 제곱
let squared = numbers.map(x => x * x);
console.log(squared);  // [1, 4, 9, 16, 25]

// 짝수만 필터링
let evens = numbers.filter(x => x % 2 === 0);
console.log(evens);  // [2, 4]

// 합계 계산
let sum = numbers.reduce((acc, x) => acc + x, 0);
console.log(sum);  // 15

7. 함수 호출 방법

일반 호출

function greet(name) {
    console.log(`안녕하세요, ${name}님!`);
}

greet('홍길동');

변수에 저장 후 호출

const myFunction = greet;
myFunction('김철수');

즉시 실행 함수 (IIFE)

(function() {
    console.log('즉시 실행됨');
})();

// 또는 화살표 함수
(() => {
    console.log('즉시 실행됨');
})();

8. 함수 스코프

함수 내부에서 선언한 변수는 함수 밖에서 접근할 수 없습니다.

function test() {
    let x = 10;  // 함수 스코프
    console.log(x);  // 10
}

// console.log(x);  // ReferenceError

// 전역 변수
let y = 20;

function test2() {
    console.log(y);  // 20 (전역 변수 접근 가능)
}

주의사항

1. 매개변수 개수

function add(a, b) {
    return a + b;
}

console.log(add(1, 2));     // 3
console.log(add(1, 2, 3));  // 3 (세 번째 인수 무시)
console.log(add(1));       // NaN (b는 undefined)

2. return 문의 위치

function test() {
    console.log('실행됨');
    return;  // 함수 종료
    console.log('실행 안 됨');  // 도달하지 못함
}

3. 화살표 함수의 this

화살표 함수는 자신의 this를 가지지 않습니다 (상위 스코프의 this 사용).

const obj = {
    name: '홍길동',
    greet: function() {
        console.log(this.name);  // '홍길동'
    },
    greetArrow: () => {
        console.log(this.name);  // undefined (전역 this)
    }
};

연습 문제

  1. 덧셈 함수

    • 두 수를 받아 합을 반환하는 함수를 작성하세요.
  2. 인사 함수

    • 이름을 받아 "안녕하세요, [이름]님!"을 반환하는 함수를 작성하세요.
  3. 최대값 함수

    • 배열을 받아 최대값을 반환하는 함수를 작성하세요.
  4. 등급 함수

    • 점수를 받아 등급(A, B, C, F)을 반환하는 함수를 작성하세요.
  5. 화살표 함수 변환

    • 다음 함수를 화살표 함수로 변환하세요:
      function multiply(a, b) {
          return a * b;
      }

다음 장 예고

다음 장에서는 배열(Array)에 대해 학습합니다.

'FrontEnd > Javascript' 카테고리의 다른 글

10. 객체  (0) 2026.01.09
9. 배열  (0) 2026.01.09
7장. 반복문  (0) 2026.01.07
6장. 조건문  (0) 2026.01.06
5장. 연산자  (0) 2026.01.06