Divide by Zero === Exception?? Really?
흔히 산술연산을 처리할 때 0으로 나누면 Divide by Zero Exception 이 발생한다고 알고 있다.
실제 연산 샘플을 구성해 봐도 실제 Exception 이 발생한다.
public static void main (String[] args) throws java.lang.Exception
{
int aa = 100 / 0;
}
위의 코드는 Exception in thread "main" java.lang.ArithmeticException: / by zero
예외가 발생한다.
정말 모든 산술 연산이 이렇게 적용될까??? Really??
책이나 관련된 정보를 찾아보면 보통 정수를 0으로 나누면
이라는 전제 조건이 있다.
그럼 정수가 아닌 경우는 어떻게 될까?
- 0 이 아닌 부동 소수점 값을 0 으로 나누면
부호 있는 Infinity
가 되고 예외는 발생하지 않는다.- 1.0 / 0.0 은 Positive-Infinity 가 된다.
- -1.0 / 0.0 은 Negative-Infinity 가 된다.
- 0 이 아닌 정수를 정수 0 으로 나누면 ArithmeticException 이 발생한다.
음!! 위와 같이 정리할 수 있다.
그런데 0.0 / 0.0
은 뭐가 나올까?
결론은 isNaN 상태가 된다. 즉, 연산 불가라고 봐야 한다.
이런 상황은 실제 변수나 VO 등에 Assign 할 경우에는 예외가 없으니 큰 문제가 없지만 JSON 으로 변환하는 등의 작업을 진행하면 뜬금없이 "Infinity", "isNaN" 과 같은 값을 만나게 된다.
- 어디서 저런 값이 나오는지 모르겠다.
- 내가 만든 코드에서는 문자열 처리한 적이 없다.
- 문자열이 Float, Double,.. 등의 자료형에 입력되면 오류가 발생하기 때문에 내가 만든 코드 문제가 아니다.
- ...
대략 이런 반응들이 나올 듯 하다. ㅠㅠ
그럼 아래과 같은 코드는 어떤 결과를 보여줄까? 예외는 발생할까?
public static void main (String[] args) throws java.lang.Exception
{
Float aa = 100.0F / 0F;
Double bb = 100.0D / 0D;
int cc = (int)(100.0F / 0);
}
결과를 한번씩 확인해 보면 위에서 정리한 내용을 알 수 있고 결과 값을 보면 왜???.....
또 다른 미지의 세계로 검색을 떠나게 될 것이다. ^^
이를 기반으로 다양한 상황에 적용해서 오류 없는 코드를 만들어 보도록 하자.!!!
References
- http://www.w3resource.com/java-tutorial/java-arithmetic-operators.php
Written by Morris (ccambo@gmail.com - MSFL)
댓글
댓글 쓰기