반응형
📘이것이 자바다 - 3장 연산자 예제
자바에서 정수형 타입은 저장할 수 있는 값의 범위가 정해져 있습니다.
그 범위를 벗어나면 오버플로우나 언더플로우 현상이 발생합니다.
이번 글에서는 byte 타입을 이용한 간단한 예제로 오버플로우와 언더플로우를 이해해보겠습니다.
📌 예제 코드
package ch03.sec03;
public class OverflowUnderflowExample {
public static void main(String[] args) {
byte var1 = 125;
for(int i=0; i<5; i++) {
var1++; //
System.out.println("var1: " + var1);
}
System.out.println("-----------------------");
byte var2 = -125;
for(int i=0; i<5; i++) {
var2--;
System.out.println("var2: " + var2);
}
}
}
📌 출력 결과
var1: 126
var1: 127
var1: -128 ← 오버플로우 발생
var1: -127
var1: -126
-----------------------
var2: -126
var2: -127
var2: -128
var2: 127 ← 언더플로우 발생
var2: 126
🔍 오버플로우(Overflow)란?
타입이 허용하는 최대값을 벗어나는 것을 말합니다.
최댓값을 넘는 순간 최소값으로 되돌아갑니다.
byte 자료형은 -128부터 127까지 총 256개의 정수만 표현할 수 있습니다.
여기서 var1++ 연산을 반복하면 127을 넘는 순간 가장 작은 값인 -128로 다시 돌아갑니다.
🔍 언더플로우(Underflow)란?
타입이 허용하는 최소값을 벗어나는 것을 말합니다.
최소값을 넘는 순간 최대값으로 되돌아갑니다.
var2-- 연산을 반복하면 -128을 넘는 순간 가장 큰 값인 127로 되돌아옵니다.
이처럼 정수 자료형의 범위를 초과하는 연산은 예상치 못한 결과를 만들어내기 때문에 주의가 필요합니다.
실제 개발에서도 이러한 오버플로우/언더플로우를 인지하고 코딩하는 것이 중요합니다.
특히, byte, short처럼 범위가 좁은 타입을 사용할 때에는 더욱 신경 써야 합니다!
반응형
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] 자바 Lombok 설치 및 사용법 (IntelliJ) (1) | 2025.05.25 |
---|---|
[JAVA] Java Scanner로 사용자 입력 받기 (1) | 2025.04.22 |
[JAVA] 사다리꼴 넓이 구하기 - double로 나눠야 하는 이유 (1) | 2025.04.21 |
[JAVA] 자바의 변수 타입과 타입 변환 (1) | 2025.04.19 |