어제 저녁에 있었던 소소한 코딩 사고 얘기입니다. 작업했던 코드 중에 아래와 같은 간단한 연산식이 있었습니다. 제가 직접 만든 식은 아니고 거래처에서 받은 금융 쪽의 간단한 인터폴레이션 식입니다.
result := prc_1 + (prc_2 – prc_1) * (val_dt - val_dt1) / (val_dt2-val_dt1);
보다시피 델파이 코드입니다만, 뭐 C++ 등 다른 언어를 사용하는 분이라도 금방 알아볼 간단한 연산식이죠. 여기에 사용된 prc_1, prc_2는 double 타입 변수이고 적절한 값이 들어가 있습니다. 그리고 val_dt1과 val_dt2는 날짜인데, 내부적으론 좀 다릅니다만 여기선 그냥 integer 타입이라고 봐도 됩니다.
여기서 에러가 날 거라고는 상상하지도 못했는데, 실제로 컴파일을 했을 때 다음과 같은 에러 메시지를 만나게 되었습니다.
E2029 ')' expected but identifier '–' found
이 수식을 이리 보고 저리 보고 돌려보고 뒤집어보기도 해도 도무지 감도 못잡겠더군요. 거의 한시간 가까이 이 한줄과 씨름을 했습니다. 아무리 봐도 에러가 발생할 수식이 아닌데 말이죠.
이게 왜 발생한 건지 금방 감이 오시는 분 있으신가요? 물론 겪어보신 분이라면 감이 오실 수 있겠습니다만, 흔히 발생할 사고가 아니어서 겪어보신 분이 많지 않을 것 같습니다.
한시간이나 걸려서 찾아낸 그 황당한 원인은, prc_2 - prc_1 부분에서 가운데의 마이너스(-) 기호였습니다. 사실은 마이너스가 아니었던 거죠. 워드로 작성된 문서에서 복사해온 코드였는데 가운데의 마이너스가 실제 아스키의 마이너스 키가 아니라 마이너스와 비슷하게 생긴 확장 한글 코드에 있는 글자였던 겁니다.
만약 워드에서 복사하기 전에 잘 살펴봤더라면 발견할 수도 있었던 것이, 워드에선 잘 보면 일반적인 마이너스보다 이 글자는 좀 더 길어보이게 되어 있습니다. 그런데, 델파이 IDE로 일단 복사해놓고 나면 보통의 마이너스 글자와 동일한 폭으로 나타나서 전혀 구별이 안됩니다. 델파이 IDE의 기본 폰트인 Courier New 폰트 탓인 듯 한데요.
제가 이게 보통의 마이너스 글자가 아니라는 걸 알아챈 건 한시간이나 끙끙대다 결국 해당 코드를 헥사에디터로 살펴본 후였습니다. 그러지 않았다면 결코 이 에러의 원인을 알아내지 못했을 것 같습니다.
사소하고 황당한 일이긴 하지만, 저처럼 갑자기 당하고 나면 원인이 뭔지 쉽게 파악하기 어려울 것 같아 공유해봅니다. 코딩 일상다반사라고나 할까요. ㅎㅎ
|
좋은 경험 공유 감사드립니다. ^^