티스토리 뷰
728x90
반응형
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)
728x90
반응형
'개발 > 자바' 카테고리의 다른 글
[Maven] Multi-Module Project에서 Java Compiler 설정하기 (0) | 2016.12.18 |
---|---|
[TOMCAT] 운영할 때 JAVA_OPTS 설정을 조심해서 사용하자. (0) | 2016.11.24 |
[TOMCAT] 수동으로 배포해 보기 (0) | 2016.11.22 |
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- dynamic nfs client provisioner
- Cluster
- Kudo
- zookeeper
- Packages
- k8s
- operator framework
- 쿠버네티스
- GIT
- Replica
- NFS
- macos
- Node
- CentOS
- SolrCloud
- KUBECTL
- operator
- CentOS 8
- provisioner
- ssh
- galera
- kudo-cli
- Galera Cluster
- terrminating
- docker
- leader
- Kubernetes
- collection
- opencensus
- custom resource
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함