Mytly 03: int형의 나머지를 구하기 위해 long을 int로 다운캐스팅할 때 문제

Ho Saint·2023년 5월 3일
0

문제

임의의 6~7자리 62진수를 생성 후 이를 BASE62로 인코딩하는 것으로 URl 생성기를 구현 후 단축 URL 엔드포인트에 요청을 보내봤을 때 위와 같은 에러메시지를 볼 수 있었다.

양수여야 될 digit에 음수가 바인딩되어 발생하는 문제였다.

144873419262252(source)를 62(base)로 나눈 나머지(long)를 int로 다운캐스팅 해줬어야 했는데

144873419262252(source)를 먼저 다운캐스팅을 하는 과정에서 비트 손실에 의해 음수인 -122599124(int)가 되고 이를 62로 나눈 나머지 값인 -14가 얻어지는 것이었다.

교훈

문제 자체는 source % base를 괄호로 묶어준 뒤 다운캐스팅하는 것으로 간단하게 해결이 됐다.

여기서 배울 수 있었던 것은

  1. 엔드포인트에 요청을 보내서 테스트하기 전에 미리 UrlGenerator 클래스에 대한 단위테스를 작성했으면 빠르게 발견할 수 있는 문제였다. 테스트를 작성하자.
  2. 다운캐스팅할 때는 항상 주의하자
  3. 컨벤션에서 캐스팅할 때는 항상 (int)source 식으로 붙이는 것을 권장하는데 위와 같은 혼동을 피하기 위해서라는 생각이 들었다.
profile
열정보다 시스템. 실수를 막을 수 있는 프로세스.

0개의 댓글