연산을 했을 때, 결과 값이 지정된 타입의 범위를 넘을 경우에는 잘못된 값이 산출 될 수 있다.
예를 들어, 아래와 같은 연산식을 보자!
1000000*1000000을 실행해서 int값에 저장하려고 하니, 엉뚱한 결과가 나오는 것을 확인하게 될 것이다.
그것은 그 결과값이 int의 범위(-21억~+21억)를 넘어갔기 때문이다.
이럴 경우에는 애초에 x와 y의 타입을 long타입으로 변환해서 계산해야 한다.
다시, 코드를 보자!
long타입으로 지정해서 계산을 하니, 결과값이 제대로 출력됨을 확인할 수 있을 것이다.
그러나 값이 정해져 있지 않고 누군가 입력할 때는 자유롭게 변환해서 계산할 수가 없다.
그것을 막기 위한 방법이 있다.
먼저, 런타임시 입력된 값일 경우에는 산술 연산자(+, -, *, /)를 직접 사용하지 않는 것이 좋다.
그리고 미리 메소드를 작성해서 오버플로우( Overflow)를 미리 조사한 뒤, '예외처리'를 해야 한다.
자바에서는 이것을 막아주는 'safeAdd 메소드'가 있다.
다음은 safeAdd메소드를 이용해 예외처리하는 코드이다.
위 코드에서처럼 20억+20억을 계산할 경우에 "오버플로우가 발생하여 정확하게 계산할 수 없음"이라는 결과를 출력한다.
그렇다면, int 범위내의 값을 넣었을 경우는 어떻게 나올까?
다음의 코드를 보자!
2만+2만을 넣으니까, 4만이라는 정확한 값이 계산됨을 확인하게 될 것이다.
이처럼 오버플로우를 막기 위해서는 sefeAdd메소드를 이용해서 미리 검사를 한 뒤, 올바른 값을 산출하도록 코드를 작성해야 한다.