프로그래밍 언어/Java

오버플로우 (Overflow), 언더플로우(Underflow) / 형변환(Typecasting)

devlara 2024. 6. 25. 15:56

 

1. 오버플로우 (Overflow)

 

허용된 범위 이상의 수의 값을 저장할 때 발생한다.

이 경우, 강제형변환을 시켜야 하는데  큰 값에서 작은 값의 자료형으로 옮겨져 가야 하기 때문에 데이터 손실 발생이 있다.  그렇기 때문에 식에서 반드시 변하는 값을 앞에 명시해 주어야 한다.

 

예)

public class Main {
    public static void main(String[] args) {
        // 더 큰 데이터 타입을 더 작은 데이터 타입으로 변환 (강제 형변환 필요)
        double bigValue = 123.45;
        int intValue = (int) bigValue;
        System.out.println("intValue: " + intValue); // 출력 결과: 123

        // 정수를 실수로 변환 (강제 형변환 필요 없음)
        int smallValue = 5;
        double doubleValue = smallValue; // 암시적 형변환 발생
        System.out.println("doubleValue: " + doubleValue); // 출력 결과: 5.0
    }
}

            [ Chat GPT 예시 참조 ]

 

2. 언더플로우( Underflow)


허용된 범위 이하의 수의 값을 저장할때 발생한다.

이 경우, 작은 값에서 큰 값의 자료형으로 변환하기 때문에 자연스럽게 자동 형변환이 적용된다.

 

예) 

public class Main {
    public static void main(String[] args) {
        byte minValue = Byte.MIN_VALUE; // byte 타입의 최솟값
        System.out.println("minValue: " + minValue); // 출력 결과: -128

        byte underflowValue = (byte) (minValue - 1); // 언더플로우 발생
        System.out.println("underflowValue: " + underflowValue); // 출력 결과: 127
    }
}

                    [ Chat GPT 예시 참조]

 

 

3. 형변환(casting)

 

값(data)의 자료형을 바꾸는 것이다. 이때, boolean은 제외된다. ( true/false만 되는 크기나 범위가 없는 데이터 유형이라서) 형변환의 종류는 앞서 나온 것처럼 강제형변환(= 명시적 형변환: Casting 또는 Narrowing )과 자동형변환(암시적 형변환: Implicit Casting 또는 Widening)이 있다.

두 유형의 형변환은 각각 데이터 손실의 위험성에 따라 사용되며 상황에 따라 이를 적절하게 처리해야 한다.

 

 

[사진 출처: www.pixabay.com / PDPics]

'프로그래밍 언어 > Java' 카테고리의 다른 글

배열(Array)  (0) 2024.06.25
패키지(Package), 임포트(import)  (0) 2024.06.25
메소드(Method)  (0) 2024.06.25
연산자(Operator) 종류와 연산자의 우선순위  (0) 2024.06.25
변수(Variable), 상수(Constant)  (0) 2024.06.25