'
본문 바로가기
study/Programming

[JAVA 기초] 오버플로우와 언더플로우

by meowdule 2025. 4. 10.

 

1. 오버플로우와 언더플로우


📌 오버플로우

  • 변수가 담을 수 있는 값의 범위를 벗어나는 데이터를 담았을 때 발생하는 현상
  • 자료형 별 값의 최대 범위를 벗어나는 경우 발생한 carry를 버림처리 하고
    sign bit를 반전시켜 최소값으로 순환시키는 현상이다.


📌 오버플로우와 언더플로우

용어 정의
오버플로우(Overflow) 자료형이 표현할 수 있는 최대값을 넘는 경우 값이 다시 최소값부터 시작되는 현상
언더플로우(Underflow) 자료형이 표현할 수 있는 최소값보다 작아지는 경우 값이 다시 최대값부터 시작되는 현상

 

이 현상은 정수형 자료형에서 자주 발생하며,

실수형에서도 언더플로우처럼 정밀도가 떨어지는 문제가 발생할 수 있습니다.

 


📌 오버플로우와 언더플로우 해결 방법

구분 설명 해결 방법
오버플로우 최대값 초과 시 최소값으로 순환 더 큰 자료형으로 변환
언더플로우 최소값보다 작아질 경우 최대값으로 순환 자료형 범위 확인
형 변환 활용 계산 전에 큰 자료형으로 미리 변환 (long) a * b 등

 

 

오버플로우와 언더플로우는 눈에 잘 띄지 않지만, 프로그램 오류의 원인이 되는 중요한 개념입니다.
간단한 연산에서도 결과가 이상할 땐, 자료형 범위와 형 변환 여부를 꼭 점검해보세요!

 

 

 

 

 

2. 자료형 범위 확인

 

각 자료형은 고정된 범위를 가집니다. 예를 들어 byte는 1바이트(8비트) 크기로 -128 ~ 127만 표현 가능합니다.

  자료형 크기 표현 범위
  byte 1 byte -128 ~ 127
  short 2 bytes -32,768 ~ 32,767
  int 4 bytes -2,147,483,648 ~ 2,147,483,647
  long 8 bytes 매우 큼
  float 4 bytes ±3.4E38
  double 8 bytes ±1.7E308

 

 

 

 

 

 

3. 오버플로우/언더플로우 예제

 

// 오버플로우 예시
byte max = 127;
max++;
System.out.println("오버플로우 결과: " + max);  // 출력: -128

// 언더플로우 예시
byte min = -128;
min--;
System.out.println("언더플로우 결과: " + min); // 출력: 127

 

  • byte는 최대값 127에서 +1을 하면 -128로 되돌아감
  • 최소값 -128에서 -1을 하면 127로 되돌아감

 

 

 

 

 

4. 해결 방법: 형 변환 활용

 

자료형의 범위를 초과할 가능성이 있는 경우, 더 큰 자료형으로 형변환하면 문제를 방지할 수 있습니다.

int a = 1_000_000;
int b = 2_000_000;

// int의 범위를 초과 → 오버플로우 발생
int result = a * b;
System.out.println("오버플로우 발생한 결과: " + result); // 잘못된 값 출력

// 해결 방법: long으로 형 변환
long correct = (long) a * b;
System.out.println("정상 결과: " + correct); // 올바른 결과 출력

 

 

 

 

 

 

 

 

 

마무리
다음 게시글에서는  상수에 대해 학습하겠습니다.