문자열 형태의 수식을 입력받아 결과를 반환하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다. 입력되는 문자열은 다음과 같은 형태입니다.
"4 add 6" "6 divide 7" "23 modulo 8"
즉, 문자열의 양쪽에는 두 개의 숫자가 위치하고, 그 사이에는 연산을 나타내는 키워드가 들어갑니다.
지원하는 연산자
가운데 위치한 연산 키워드는 아래 다섯 가지 중 하나입니다.
"add", "divide", "multiply", "modulo", "subtract"
각각 더하기, 나누기, 곱하기, 나머지, 빼기를 의미하며, 함수는 해당 연산을 수행한 후 올바른 결과값을 반환해야 합니다.
구현 예제
switch 문을 활용하면 각 연산을 깔끔하게 분리하여 처리할 수 있습니다. 먼저 split(" ")으로 문자열을 공백 기준으로 잘라 숫자와 연산자를 분리하고, 이후 각 case에 맞는 계산을 수행합니다.
const problem = "3 add 16";
const calculate = opr => {
const [num1, operation, num2] = opr.split(" ");
switch (operation) {
case "add":
return +num1 + +num2;
case "divide":
return +num1 / +num2;
case "subtract":
return +num1 - +num2;
case "multiply":
return +num1 * +num2;
case "modulo":
return +num1 % +num2;
default:
return 0;
}
}
console.log(calculate(problem));여기서 주목할 점은 +num1, +num2처럼 단항 덧셈 연산자(+)를 사용해 문자열을 숫자로 변환했다는 것입니다. split()의 결과는 항상 문자열 배열이므로, 이 변환 과정 없이는 + 연산 시 문자열이 서로 붙어버리는 오류가 발생할 수 있습니다.
또한 default 블록에서 알 수 없는 연산자가 들어올 경우 0을 반환하도록 처리하여, 잘못된 입력에 대한 방어 코드 역할도 함께 하고 있습니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
19
"3 add 16"은 3 + 16을 의미하므로 정확히 19가 출력되는 것을 확인할 수 있습니다.