Mingyu Kim

오버플로우(Overflow)와 언더플로우(Underflow)

1. 정의

2. 왜 이런 일이 벌어질까? (자동차 주행거리계 원리)

자동차의 주행거리계가 999,999km에서 1km를 더 가면 000,000km가 되는 것과 같다.

3. 실무에서의 위험성

자바 연산자는 오버플로우가 발생해도 에러(Exception)를 던지지 않는다. 그냥 잘못된(쓰레기) 값을 변수에 담고 다음 코드를 실행해 버린다.

byte value = 127;
value++;
System.out.println(value); // 결과: -128 (오버플로우 발생!)

만약 이게 은행 계좌 잔고나 게임 포인트였다면?

4. 방어적인 프로그래밍 (Safety First)

안전한 연산이 필요할 때는 일반 연산자 대신 이를 활용한다.

메소드 설명
Math.addExact(a, b) 더하기 결과가 넘치면 ArithmeticException 발생
Math.subtractExact(a, b) 빼기 결과가 넘치면 예외 발생
Math.multiplyExact(a, b) 곱하기 결과가 넘치면 예외 발생
int x = 1000000;
int y = 1000000;

try {
  int result = Math.multiplyExact(x, y); // 안전한 연산
} catch (ArithmeticException e) {
  System.out.println("오버플로우 발생!");
}

5. 실수 타입의 오버플로우와 언더플로우

정수와 달리 실수(float, double) 타입에서 오버플로우가 발생하면?

6. 요약 및 체크포인트