본문 바로가기
Back-end/JAVA

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

by yseee 2025. 4. 23.
반응형

📘이것이 자바다 - 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처럼 범위가 좁은 타입을 사용할 때에는 더욱 신경 써야 합니다!

반응형