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)는 동일한 입력에 항상 동일한 출력을 반환하고, 외부 상태를 변경하지 않습니다. 이런 함수는 테스트하기 쉽고 예측 가능하므로, 가능하면 순수 함수로 작성하려고 합니다."
"이 함수가 너무 많은 일을 하고 있어요. 단일 책임 원칙에 따라 데이터 검증과 저장 로직을 별도 함수로 분리하면 테스트도 쉬워지고 재사용성도 높아집니다."
하나의 함수가 100줄이 넘거나 여러 가지 일을 하면 이해하기 어렵습니다. 함수 이름이 "and"를 포함한다면 분리가 필요하다는 신호입니다. 한 함수는 한 가지 일만 하도록 설계하세요.
함수 내에서 전역 변수를 수정하거나 외부 상태를 변경하면 버그 추적이 어렵습니다. 가능하면 입력만으로 결과를 계산하고 반환하는 순수 함수를 지향하세요.
함수 이름은 동사로 시작하고 무엇을 하는지 명확히 드러내야 합니다. `process()`보다 `validateEmail()`, `calculateTotalPrice()` 같은 구체적인 이름이 코드 가독성을 높입니다.