목차
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); // 올바른 결과 출력
마무리
다음 게시글에서는 상수에 대해 학습하겠습니다.
'study > Programming' 카테고리의 다른 글
| [JAVA 기초] Java 연산자 개요 및 분류 (1) | 2025.04.12 |
|---|---|
| [JAVA 기초] 상수(final) (1) | 2025.04.11 |
| [JAVA 기초] 형 변환 (Casting) (1) | 2025.04.09 |
| [JAVA 기초] 변수의 명명 규칙 (1) | 2025.04.08 |
| [JAVA 기초] 참조형 변수란? (1) | 2025.04.07 |