HOME > js

자바스크립트 함수의 이름을 알아내는 방법

마지막 수정일 : 2022-08-23 / 생성일 : 2022-08-12
272
View Count
함수 이름을 알아내다? 항상 동일한 함수를 실행하는 경우라면 당연히 알 수 있겠지만 만약 함수를 인자로 받아 실행하는 함수가 달라지는 경우라면 함수의 이름이 달라지게 될 것입니다. 이런 경우 함수 이름을 얻는 방법은 무엇일까요?



# 자바스크립트에서 함수 이름 알아내기, Function name
항상 그런 것은 아니지만 상황에 따라 함수명(함수이름)을 알아야 하는 경우가 발생할 수 있습니다. 물론 일반적으로 함수 이름을 알아야하는 경우는 흔하지는 않습니다. 한 가지 예를 들자면 특정 기능에서 에러가 발생했을 경우 에러 메시지와 함께 에러가 발생한 함수명을 보여주고 싶은 경우가 하나의 예가 될 수 있겠습니다.


이런 기능을 개발해야 하는 경우 어떻게 해당 함수명을 알 수 있을까요? 우선 함수명을 얻는 것은 가능합니다. 이 경우 세 가지 방법이 존재하는데요 ~ ES 6에 추가된 Function.name을 기준으로 간단한 방법이 있고 이 외에 조금 복잡한 방법으로 나눠지게 되죠. 일단 가능한 방법을 나열해봅니다.

  • ES 6의 Function.name을 사용하는 방법
  • arguments.callee.name을 사용하는 방법
  • 함수를 문자열로 바꾼 후 정규표현식이나 split() 등을 사용하여 이름을 추출하는 방법

그럼 아래에서 각각 알아보겠습니다.


! ES 6의 Function.name을 사용하는 방법
먼저 ES 6 부터는 Function에서 name 프로퍼티를 사용하여 간단하게 함수 이름을 알 수 있습니다. 예를들어 아래와 같이 코드를 작성할 수 있습니다.
getFunctionName  = function() {
  return getFunctionName.name;
}

getFunctionName()

// Result
'getFunctionName'

보시는 것처럼 간단하게 현재 함수의 이름을 반환하게 됩니다.

@ 이 외의 방법들 알아보기
다음으로 ES 6 이 전에는 어떻게 사용했는지 알아보도록 하겠습니다. 위에 언급한 것 처럼 두 가지 방법이 더 존재합니다.
일단 이 두 가지 방법은 몇 가지 제약사항이 존재합니다. 먼저 함수 내부에서 arguments.callee.name을 사용하는 방법 역시 매우 간단해 보입니다. 하지만 이 방법은 Strict mode(엄격 모드)에서는 callee를 호출할 수 없으므로 이 경우 함수 이름을 가져오는 것이 어렵습니다. 예를들어 아래와 같은 경우 에러가 발생합니다.
'use strict';

getFunctionName = function() {
  return arguments.callee.name;
}

다음 방법은 바로 함수를 문자열로 변환해서 문자열에 포함된 함수 이름을 가져오는 방법입니다. 이 방법 역시 제약사항이 존재하는데 리터럴로 선언된 함수의 경우 함수 이름을 가져올 수 없습니다. 리터럴의 경우 함수 이름 없이 function() {} 과 같이 출력되기 때문입니다.

(O) function getFunctionName() { ... }
(X) getFunctionName = function() { ... }


여기까지 함수 이름을 가져오는 방법에 대하여 간략하게 알아보았습니다. 이런 이유로 ES 6의 Function.name을 사용하는 것이 가장 편리하고 많이 사용되는 방법이라 알 수 있겠습니다.
Author ByEnSSo