eval() ์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ

eval() ์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ

D
dongAuthor
5 min read

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿด ๋•Œ eval() ํ•จ์ˆ˜๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ณค ํ•ฉ๋‹ˆ๋‹ค. eval()์€ ๋ฌธ์ž์—ด์„ ์ฝ”๋“œ๋กœ ์ธ์‹ํ•˜๊ณ  ์‹คํ–‰ํ•ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ฃ . ํ•˜์ง€๋งŒ ์ด ํŽธ๋ฆฌํ•จ ๋’ค์—๋Š” ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์œ„ํ—˜๊ณผ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๊ฐ€ ์ˆจ์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” eval()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์™œ ์œ„ํ—˜ํ•œ์ง€ ์•Œ์•„๋ณด๊ณ , ๋” ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋Œ€์•ˆ์ธ new Function()์„ ์‚ฌ์šฉํ•ด ๋™์  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

eval()์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ์œ„ํ—˜ํ• ๊นŒ์š”?

eval()์€ ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ „์—ญ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, eval("2 + 2")๋Š” ์ˆซ์ž 4๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„๋œ ์ฝ”๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๊ณ„์‚ฐ๊ธฐ ๋กœ์ง ๋“ฑ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ eval()์˜ ์‚ฌ์šฉ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

eval()์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ด…์‹œ๋‹ค !

1. ๋ณด์•ˆ ์ทจ์•ฝ์ 

eval()์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ๋ณด์•ˆ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋œ ์Šค์ฝ”ํ”„์˜ ๊ถŒํ•œ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๊ฒ€์ฆ ์—†์ด eval()๋กœ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์•…์˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ eval()๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

var userContent = getUserInput(); // ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›๋Š” ํ•จ์ˆ˜
eval(userContent); // ์œ„ํ—˜! ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ์ด ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ "alert('ํ•ดํ‚น๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค!')"์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋˜์–ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ์ด๋Š” ์›น์‚ฌ์ดํŠธ์˜ ์ค‘์š” ์ •๋ณด ์œ ์ถœ์ด๋‚˜ ์„œ๋น„์Šค ์žฅ์• ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์œ„ํ˜‘์ž…๋‹ˆ๋‹ค.

2. ์„ฑ๋Šฅ ์ €ํ•˜

eval()์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„(JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋“ฑ)์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ eval()์ด ์‚ฌ์šฉ๋˜๋ฉด, ์—”์ง„์€ eval() ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ• ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์—”์ง„์€ ๋ณ€์ˆ˜ ์ด๋ฆ„ ์กฐํšŒ์™€ ๊ฐ™์€ ์ž‘์—…์„ ๋А๋ฆฐ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ณ , ์ž ์žฌ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•ด์„ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

๋” ์•ˆ์ „ํ•œ ๋Œ€์•ˆ: new Function()

eval()์˜ ์œ„ํ—˜์„ฑ์„ ํ”ผํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ new Function() ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

new Function()์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก๊ณผ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

new Function() ์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

let func = new Function ([arg1, arg2, ...argN], functionBody);

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ new Function()์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const add = new Function('a', 'b', 'return a + b');
console.log(add(2, 3));  // ์ถœ๋ ฅ: 5

์ด์ฒ˜๋Ÿผ new Function()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด๋กœ ์ •์˜๋œ ๋กœ์ง์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

new Function()์€ ์™œ ๋” ์•ˆ์ „ํ• ๊นŒ์š”?

new Function()๊ณผ eval()์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ **์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context)**์— ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ฐจ์ด

  • eval(): ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ **๋กœ์ปฌ ์Šค์ฝ”ํ”„(Local Scope)**์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, eval()์ด ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • new Function(): ํ•ญ์ƒ **์ „์—ญ ์Šค์ฝ”ํ”„(Global Scope)**์—์„œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. new Function()์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑ๋œ ์‹œ์ ์˜ ๋กœ์ปฌ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

2. ๋ฒ”์œ„ ์ œํ•œ์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ ๊ฐ•ํ™”

new Function()์œผ๋กœ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜๋Š” ํด๋กœ์ €(closure)๋ฅผ ํ˜•์„ฑํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ(Lexical Environment)์„ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค์ง ์ „์—ญ ์Šค์ฝ”ํ”„๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ฃ .

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ํ™•์ธํ•ด ๋ด…์‹œ๋‹ค.

function demo() {
  let localVariable = '์ €๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.';

  // eval()์€ ๋กœ์ปฌ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  eval("console.log(localVariable);"); // ์ถœ๋ ฅ: "์ €๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค."

  // new Function()์€ ๋กœ์ปฌ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผ ๋ถˆ๊ฐ€
  try {
    const myFunction = new Function("console.log(localVariable);");
    myFunction();
  } catch (e) {
    console.error(e); // ์ถœ๋ ฅ: ReferenceError: localVariable is not defined
  }
}

demo();

์œ„ ์ฝ”๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, eval()์€ demo ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜์ธ localVariable์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, new Function()์œผ๋กœ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ new Function()์€ ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๋ฏ€๋กœ, ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์„ฑ๋Šฅ์ƒ ์ด์ 

eval()์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์ตœ์ ํ™”๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๋ฐ˜๋ฉด, new Function()์€ ์ƒ๋Œ€์ ์œผ๋กœ ์„ฑ๋Šฅ์— ๋” ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. new Function()์œผ๋กœ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ณ„๋„์˜ ํ•จ์ˆ˜ ๋ชธ์ฒด ์•ˆ์— ์กด์žฌํ•˜๋ฉฐ, ๋กœ์ปฌ ์Šค์ฝ”ํ”„๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , new Function() ์—ญ์‹œ ๋Ÿฐํƒ€์ž„์— ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ •์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋А๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” eval()๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

new Function() ์‚ฌ์šฉ ์‹œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

new Function()์ด eval()๋ณด๋‹ค ์•ˆ์ „ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ง์ ‘ ์ฝ”๋“œ ๋ณธ๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ํ•ญ์ƒ ๋‹ค์Œ ์ง€์นจ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”: ๊ณ„์‚ฐ๊ธฐ ๋กœ์ง์„ ๋งŒ๋“ ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ „์ฒด ์ˆ˜์‹์„ ๊ทธ๋Œ€๋กœ new Function()์— ๋„˜๊ธฐ์ง€ ๋งˆ์„ธ์š”. ๋Œ€์‹ , ์ž…๋ ฅ๊ฐ’์„ ํŒŒ์‹ฑํ•˜๊ณ  ์•ˆ์ „์„ฑ์ด ๊ฒ€์ฆ๋œ ์—ฐ์‚ฐ์ž(+, -, *, /)์™€ ์ˆซ์ž๋งŒ ์กฐํ•ฉํ•˜์—ฌ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์—„๊ฒฉ ๋ชจ๋“œ(Strict Mode) ์‚ฌ์šฉ: new Function('"use strict"; ...')์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ๋ณธ๋ฌธ ์‹œ์ž‘ ๋ถ€๋ถ„์— 'use strict'๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. ์—„๊ฒฉ ๋ชจ๋“œ๋Š” ์ผ๋ถ€ ์œ„ํ—˜ํ•œ ๋ฌธ๋ฒ•์„ ์—๋Ÿฌ๋กœ ์ฒ˜๋ฆฌํ•ด ์ค๋‹ˆ๋‹ค.
  3. ๋Œ€์•ˆ์„ ๋จผ์ € ๊ณ ๋ คํ•˜์„ธ์š”: ๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๋งŽ์€ ๊ฒฝ์šฐ, ์ •์ ์ธ ํ•จ์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(์˜ˆ: ๊ฐ์ฒด๋‚˜ ๋งต)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๋” ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ํ–ฅํ•˜์—ฌ

eval()์€ ๊ฐ•๋ ฅํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ๊ทธ ์ด๋ฉด์—๋Š” ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ ๋ฆฌ์Šคํฌ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. MDN ์›น ๋ฌธ์„œ์—์„œ๋Š” eval()์„ "์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ!(Never use eval!)"์ด๋ผ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฝ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” new Function()์ด๋ผ๋Š” ๋” ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. new Function()์€ ์‹คํ–‰ ์Šค์ฝ”ํ”„๋ฅผ ์ „์—ญ์œผ๋กœ ์ œํ•œํ•˜์—ฌ eval()์˜ ์ฃผ์š” ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ , ์ฝ”๋“œ ์ตœ์ ํ™”์—๋„ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒํ™ฉ ์ž์ฒด๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ผ๋ฉด, ์ด์ œ๋ถ€ํ„ฐ๋Š” eval() ๋Œ€์‹  new Function()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๋Š” ํ•œ์ธต ๋” ๋†’์€ ์ˆ˜์ค€์œผ๋กœ ๋ฐœ์ „ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

eval() ์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ | devdong