학교 다닐 때 Long Type을 int로 casting 할 경우 문제가 생길 수 있다고 배웠던 거 같다.

이런걸 Down Casting이라고 했던가? 더 많은 저장공간을 사용하는 Data Type을 더 적은 

저장공간을 사용하는 Data Type으로 casting할 때 문제가 생길 수 있다고 배웠다.

상식적으로 32평 집에 가구가 꽉 차있는데 24평으로 이사를 가야 한다면 무언가를 버려야

하지 않겠는가.

근데 그게 이사의 경우에는 필요없는 것을 버리면 문제가 해결되지만 Casting의 경우에는

원래 예상했던 것과 다른 결과를 초래한 뒤 결국에는 프로그램이 죽거나. 전혀 예상하지

못했던 결과를 낳을 수도 있다.

Android Market에 올려놓은 ShoutSecret이라는 프로그램이 갑자기 동작하지 않아서 Debuging을 

해보니 Casting이 제대로 되지 않아서 발생한 문제였다.

문제의 코드는 아래 한줄이다.

int idx = (int)System.currentTimeMillis() % 6;

currentTimeMillis() 함수는 1970년 1월 1일 0시 0분 0초를 기준으로 경과된 시간을 milliseconds 

단위로 반환하는 함수라서 상당히 큰 값을 반환하기 때문에 int로 casting할 경우 값이 바뀌게 된다.

어떤 경우에는 음수로 바뀌기도 하는데 위의 경우 음수로 바뀌게 되면 음수를 index로 사용하기 

때문에 index out of bound exception을 발생시킬 것이다.

위의 코드는 아래와 같이 변경되면 원래 의도대로 동작한다.

int idx = (unsigned int)(System.currentTimeMillis() % 6);