Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 익명 함수는 성능에 영향을 줄까?

자바스크립트에서 익명 함수(anonymous function)를 사용하면 성능에 영향을 줄 수 있습니다. 특히 반복문 안에서 익명 함수를 선언하면 매 반복(iteration)마다 새로운 함수 객체가 생성되기 때문입니다. 이는 불필요한 메모리 할당과 가비지 컬렉션 부담으로 이어져 전체 실행 성능을 떨어뜨릴 수 있습니다.

익명 함수란?

이름 그대로 익명 함수는 식별자(함수 이름) 없이 생성되는 함수입니다. 일반적으로 변수에 할당되어 사용되며, 변수 이름을 통해 호출합니다. 또한 다른 함수의 인수로 전달하는 콜백(callback) 용도로도 널리 활용됩니다.

사용 예시

다음은 자바스크립트에서 익명 함수를 변수에 할당한 뒤, 변수 이름으로 호출하는 기본적인 방법입니다.

var func = function() {
    alert('This is anonymous');
}
func(); // 변수 이름으로 호출

아래처럼 값을 반환하는 익명 함수도 손쉽게 만들 수 있습니다.

// 익명 함수
var a = function() {
    return 5;
}

성능에 미치는 영향

  • 반복문 내 함수 생성: 루프 안에서 익명 함수를 정의하면 매번 새로운 함수 객체가 만들어져 성능 저하가 발생할 수 있습니다. 가능하면 함수를 루프 밖에서 한 번만 정의하는 것이 좋습니다.
  • 디버깅과 스택 추적: 이름이 없기 때문에 오류 발생 시 콜 스택에서 해당 함수를 식별하기 어려워 개발 효율이 떨어질 수 있습니다.
  • 호이스팅(hoisting) 차이: 함수 선언문(function declaration)은 호이스팅되어 선언 전에 호출할 수 있지만, 익명 함수 표현식은 변수에 할당된 이후에만 사용할 수 있습니다.

정리

익명 함수 자체가 항상 성능 문제를 일으키는 것은 아닙니다. 다만 반복문 안에서 매번 새로운 함수 객체를 생성하는 패턴은 피하는 것이 좋습니다. 재사용이 필요한 로직이라면 루프 외부에서 한 번 정의하고, 디버깅 편의를 위해 이름을 붙인 함수 표현식(named function expression)을 활용하는 것이 더 바람직한 코딩 습관입니다.