[JS] string과 number타입 덧셈 연산이 문제를 일으킴

임혁진·2023년 12월 21일
0

로빌

목록 보기
7/15

문제

여태까지 잘 연산되던 계산기가 특정 상황에서 계산이 안되는 현상을 발견했다.
그것은 팔찌의 enhance옵션이 발동되면서(쐐기+망치 등) 들어오는 옵션에 덧셈연산이 추가되는 부분이었다.

상황

여태까지는 메서드로 들어오는 percent(value)의 값은 일반적으로 string이든 number든 상관이 없었다. 왜냐하면 앞에서 string이 들어오더라도 뒤에서 *이나 / 을 하게 되면 number로 파싱해서 number간의 연산과 동일하게 진행되기 때문이다.(의도한 대로)

하지만 덧셈연산이 되면 다르다 문자열의 concat이 되버리면서 의도하지 않은 숫자가 완성된다. enhance옵션에 한해서 덧셈 연산이 있었는데 이 부분에서만 오류가 발생했다.

해결

아무래도 지금 당장은 프로젝트 규모가 너무 커졌고 모든 연산기에 데이터 타입을 체크해주긴 힘들었다. 그래서 덧셈 연산이 있는 메서드 부분을 최대한 확인하려고 노력했고 같은 문제가 발생하면 쉽게 찾을 수 있게 되었다. 하지만 이러한 해결책이 좋은 방법은 아니라고 생각되어 다음에 새 프로젝트를 할 때는 어떻게 할지 생각해 보았다.

Best practice

아무래도 이런 상황에서 TypeScript였다면? 이라는 생각을 지울 수가 없다. 물론 지금 전체적인 상황에서 처음부터 TypeScript를 도입했다면 초창기 JS도 익숙하지 않은 상황에서 프로젝트 생산속도가 상당히 부족했을 것 같다.

하지만 프로젝트 완성 단계, 그리고 새 기능들을 고안하는 현재 기준에서 봤을 때 지금 생기는 문제들은 주로 이런 작은 예외처리단계, 타입체크가 가능했다면 이미 처리되었을 문제들이 많이 보인다.

그래서 지금 당장 JS에서 해결하기 위해 2중 안전장치(입력시에도 number로 잘들어가는지 확인하고 계산 시에도 string인 경우 number로 변환 후 계산하도록)를 도입하는게 좋을 것 같다.

profile
TIL과 알고리즘

0개의 댓글