💻 프로그래밍

Function

함수

재사용 가능한 코드 블록. 입력(매개변수)을 받아 출력(반환값) 생성.

📖 상세 설명

함수(Function)는 프로그래밍에서 특정 작업을 수행하는 독립적인 코드 블록입니다. 입력값(매개변수)을 받아 처리하고 결과값(반환값)을 돌려주며, 한 번 정의하면 여러 곳에서 반복 호출하여 사용할 수 있습니다.

함수는 코드 재사용성을 높이는 가장 기본적인 방법입니다. 동일한 로직을 여러 번 작성하는 대신 함수로 정의하면 코드 중복을 줄이고, 수정이 필요할 때 한 곳만 변경하면 됩니다. 이는 유지보수성을 크게 향상시킵니다.

함수는 추상화(Abstraction)의 핵심 도구입니다. 복잡한 로직을 의미 있는 이름의 함수로 감싸면 코드의 가독성이 높아지고, 다른 개발자가 내부 구현을 몰라도 함수 이름과 매개변수만 보고 사용할 수 있습니다.

현대 프로그래밍에서 함수는 일급 객체(First-class citizen)로 취급되어 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 반환값으로 사용할 수 있습니다. 이러한 특성을 활용한 함수형 프로그래밍(Functional Programming)은 부수 효과를 줄이고 테스트하기 쉬운 코드를 작성하는 패러다임으로 널리 사용됩니다.

💻 코드 예제

// 1. 기본 함수 정의와 호출
function greet(name) {
    return `안녕하세요, ${name}님!`;
}

console.log(greet("철수"));  // 출력: 안녕하세요, 철수님!

// 2. 매개변수와 반환값
function calculateArea(width, height) {
    const area = width * height;
    return area;
}

const result = calculateArea(10, 5);
console.log(`면적: ${result}`);  // 출력: 면적: 50

// 3. 기본값 매개변수 (Default Parameters)
function createUser(name, role = "user", active = true) {
    return { name, role, active, createdAt: new Date() };
}

const admin = createUser("관리자", "admin");
const guest = createUser("게스트");  // role="user", active=true 기본값 사용

// 4. 화살표 함수 (Arrow Function)
const add = (a, b) => a + b;
const square = x => x * x;
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);  // [2, 4, 6, 8, 10]

// 5. 고차 함수 (Higher-Order Function)
function createMultiplier(factor) {
    return function(number) {
        return number * factor;
    };
}

const double = createMultiplier(2);
const triple = createMultiplier(3);
console.log(double(5));  // 출력: 10
console.log(triple(5));  // 출력: 15

// 6. 콜백 함수 활용
function processData(data, onSuccess, onError) {
    try {
        const processed = data.map(item => item.toUpperCase());
        onSuccess(processed);
    } catch (error) {
        onError(error.message);
    }
}

processData(
    ["hello", "world"],
    result => console.log("성공:", result),
    error => console.log("실패:", error)
);
// 출력: 성공: ["HELLO", "WORLD"]

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"이 로직이 세 군데서 반복되고 있어요. 유틸리티 함수로 분리해서 재사용하면 코드 중복도 줄이고 나중에 수정할 때도 한 곳만 고치면 됩니다."
💬 면접에서
"순수 함수(Pure Function)는 동일한 입력에 항상 동일한 출력을 반환하고, 외부 상태를 변경하지 않습니다. 이런 함수는 테스트하기 쉽고 예측 가능하므로, 가능하면 순수 함수로 작성하려고 합니다."
💬 코드 리뷰에서
"이 함수가 너무 많은 일을 하고 있어요. 단일 책임 원칙에 따라 데이터 검증과 저장 로직을 별도 함수로 분리하면 테스트도 쉬워지고 재사용성도 높아집니다."

이 주제로 모의면접 보기 → WIA SOOM AI 면접 · 무료로 시작

⚠️ 흔한 실수 & 주의사항

❌
함수가 너무 많은 일을 함

하나의 함수가 100줄이 넘거나 여러 가지 일을 하면 이해하기 어렵습니다. 함수 이름이 "and"를 포함한다면 분리가 필요하다는 신호입니다. 한 함수는 한 가지 일만 하도록 설계하세요.

❌
부수 효과(Side Effect) 남용

함수 내에서 전역 변수를 수정하거나 외부 상태를 변경하면 버그 추적이 어렵습니다. 가능하면 입력만으로 결과를 계산하고 반환하는 순수 함수를 지향하세요.

✅
명확한 함수 이름 사용

함수 이름은 동사로 시작하고 무엇을 하는지 명확히 드러내야 합니다. `process()`보다 `validateEmail()`, `calculateTotalPrice()` 같은 구체적인 이름이 코드 가독성을 높입니다.

🔗 관련 용어

📚 더 배우기