익명 함수
이름이 없는 함수입니다. 변수에 할당하거나 다른 함수의 인자로 바로 전달할 때 사용합니다.
기본 형태
// 기명 함수
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', () => { ... });