익명 함수

이름이 없는 함수입니다. 변수에 할당하거나 다른 함수의 인자로 바로 전달할 때 사용합니다.

기본 형태

// 기명 함수
function greet(name) {
    return `Hello, ${name}`;
}

// 익명 함수
const greet = function(name) {
    return `Hello, ${name}`;
};

왜 사용하나?

JavaScript 예시

콜백으로 사용

// 익명 함수를 콜백으로 전달
setTimeout(function() {
    console.log("1초 후 실행");
}, 1000);

// 배열 메서드
[1, 2, 3].map(function(x) {
    return x * 2;
});

화살표 함수 (ES6)

// 익명 함수의 간결한 형태
const add = (a, b) => a + b;

[1, 2, 3].map(x => x * 2);

setTimeout(() => console.log("실행"), 1000);

즉시 실행 함수 (IIFE)

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

// 화살표 함수로
(() => {
    console.log("즉시 실행");
})();

Java 예시 (람다)

// 익명 클래스
Runnable task = new Runnable() {
    @Override
    public void run() {
        System.out.println("실행");
    }
};

// 람다 (익명 함수)
Runnable task = () -> System.out.println("실행");

// 컬렉션에서 사용
List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.stream()
    .map(x -> x * 2)
    .forEach(x -> System.out.println(x));

기명 함수 vs 익명 함수

항목기명 함수익명 함수
이름있음없음
재사용쉬움변수에 담아야 함
호이스팅O (선언문)X
디버깅스택에 이름 표시anonymous로 표시
용도재사용, 명확한 역할콜백, 일회성

디버깅 차이

// 기명 함수 - 에러 추적 쉬움
function fetchData() {
    throw new Error("실패");
}
// Error at fetchData

// 익명 함수 - 추적 어려움
const fetchData = function() {
    throw new Error("실패");
};
// Error at anonymous

언제 뭘 쓰나?

// 재사용, 명확한 역할 → 기명 함수
function validateEmail(email) { ... }

// 콜백, 일회성 → 익명 함수
button.addEventListener('click', () => { ... });

CSLOG에서 보기