기본 콘텐츠로 건너뛰기

라벨이 Float인 게시물 표시

[Java] Divide by Zero 예외는 항상 발생할까?

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,.. 등의 자료형에 입력되면 오류가 발생하기 때문에 내가 만든 코드 문제가 아니다. ... 대략 이런 반응들이 나올 듯 하다. ㅠㅠ 그럼 아래과 같은 코드는