본문 바로가기
Programming/Javascript

[Javascript] 사용자 정의 함수 2 - Function생성자

by Bam_t 2021. 2. 24.
728x90

두번째 방법인 Function 생성자를 이용한 방법입니다.


Function 생성자는 자바스크립트에 내장된 객체입니다. 내장 객체는 사용자가 정의하는 것이 아닌 자바스크립트에 포함되어 어디서나 사용가능한 객체이며, 이는 객체에서 다시 다루겠습니다.

 

주의점은 function명령과 다르게 앞이 대문자 'F'로 시작한다는 것을 주의해야합니다.

기본적인 사용방법은 다음과 같습니다.

let 변수명 = new Function(인수, 함수의 본체);

 

 

소괄호에 인수와 함수의 본체가 같이와서 조금 난해해 보이지만, 인수가 여러개라면 여러개를 콤마로 늘어놓고, 마지막에 함수의 본체를 기입하는 방식입니다.

 

let addNumber = new Function('num1', 'num2', 'return num1+num2');

console.log("결과: " + addNumber(1, 2));

혹은 작은따옴표로 인수부분과 본체부분을 구별하기도 합니다.

let addNumber = new Function('num1, num2', 'return num1+num2');

console.log("결과: " + addNumber(1, 2));

혹은 세미콜론으로 여러줄의 본체를 구성할 수 있습니다.

let addNumber = new Function('num1, num2', 'console.log("더하기"); return num1+num2');

console.log("결과: " + addNumber(1, 2));

 


 

이렇게 보니 이전의 function명령과는 차이가 보이지 않고 오히려 여러줄의 코드를 기술할 때는 불편함을 보입니다. 그럼에도 불구하고 Function생성자를 이용한 선언이 존재하는 이유는 Function 생성자는 인수나 함수 본체를 문자열로 정의 할 수 있다는 점이 있기 때문입니다.

 

위의 Function생성자 함수 정의를 보면 모두 문자열임을 이제 눈치 챌수 있었는데요, 이를 이용하여 다음과 같은 선언이 가능합니다.

let param = 'num1, num2';
let getResult = 'return num1 + num2;';

let addNumber = new Function(param, getResult);

console.log("합계: " + addNumber(1, 2));

 

문자열을 연결해 동적으로 함수를 생성하고 사용할수 있지만 이 방법을 자주 사용해서는 안됩니다. 보안상으로 취약하기 때문인데요. 문자열을 통해 본체를 조작하게 된다면 외부에서 문자열을 조작하여 프로그램을 조작하거나 프로그램의 실행을 바꿀수도 있기때문에 가급적이면 지양하는것이 좋습니다.

그래서 가급적이면 function명령, 다음에 다룰 리터럴방식과 애로우함수 방식을 이용하는 것이 좋습니다.


728x90

댓글