Lv.0 - 간단한 식 계산하기

송철진·2023년 4월 25일
0

문제 설명

문자열 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

Solution

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))
}

Solution2

const solution = eval

최근 프로그래머스에 코딩 기초 트레이닝 코너가 생겼다.

다른 사람의 풀이를 보다가 eval()을 처음 알게 되어서 기록을 남겨본다.

eval() : 문자로 표현된 JavaScript 코드를 실행하는 함수
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/eval

console.log(eval('2 + 2')); // 4

내 나름대로 만족스럽게 풀었다 싶었는데 JS 코드 자체를 실행해주는 함수라니!
얼마나 간단하고 코드인가!

그런데 MDN 문서를 살펴보니,

eval을 절대 사용하지 말 것!
eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수입니다. 악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면, 당신의 웹페이지나 확장 프로그램의 권한으로 사용자의 기기에서 악의적인 코드를 수행하는 결과를 초래할 수 있습니다. 또한, 제3자 코드가 eval()이 호출된 위치의 스코프를 볼 수 있으며, 이를 이용해 비슷한 함수인 Function으로는 실현할 수 없는 공격이 가능합니다.

또한 최신 JS 엔진에서 여러 코드 구조를 최적화하는 것과 달리 eval()은 JS 인터프리터를 사용해야 하기 때문에 다른 대안들보다 느립니다.

..이런 함수도 있구나 정도로 알고 넘어가자.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글