문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.
제한사항
0 ≤ a, b ≤ 40,000
0을 제외하고 a, b는 0으로 시작하지 않습니다.
입출력 예
binomial result
"43 + 12" 55
"0 - 7777" -7777
"40000 * 40000" 1600000000
function solution(binomial) {
const [a,op,b] = binomial.split(' ')
const operator = {
'+': (a,b)=>a+b,
'-': (a,b)=>a-b,
'*': (a,b)=>a*b
}
return operator[op](Number(a),Number(b))
}
const solution = eval
최근 프로그래머스에 코딩 기초 트레이닝 코너가 생겼다.
다른 사람의 풀이를 보다가 eval()
을 처음 알게 되어서 기록을 남겨본다.
eval()
: 문자로 표현된 JavaScript 코드를 실행하는 함수
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/evalconsole.log(eval('2 + 2')); // 4
내 나름대로 만족스럽게 풀었다 싶었는데 JS 코드 자체를 실행해주는 함수라니!
얼마나 간단하고 코드인가!
그런데 MDN 문서를 살펴보니,
eval을 절대 사용하지 말 것!
eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수입니다. 악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면, 당신의 웹페이지나 확장 프로그램의 권한으로 사용자의 기기에서 악의적인 코드를 수행하는 결과를 초래할 수 있습니다. 또한, 제3자 코드가 eval()이 호출된 위치의 스코프를 볼 수 있으며, 이를 이용해 비슷한 함수인 Function으로는 실현할 수 없는 공격이 가능합니다.또한 최신 JS 엔진에서 여러 코드 구조를 최적화하는 것과 달리 eval()은 JS 인터프리터를 사용해야 하기 때문에 다른 대안들보다 느립니다.
..이런 함수도 있구나 정도로 알고 넘어가자.