[JAVA] Primitive 타입의 주의점

김상현·2024년 1월 15일
1

JAVA

목록 보기
3/3
post-thumbnail

Primitive type의 값을 다룰 때 주의해야할 점이 있다.

정수형의 Primitive type

int type의 정수로 표현할 수 있는 값의 가장 큰 값은 2^31-1(2147483647)이다. int type의 변수에 2147483647 값을 할당하고 1을 더한다면 우리가 원하는 결과는 2147483648 이지만 Java 세계에서의 결과는 다음과 같다.

📎 Code

public class Main {
	public static void main(String[] args) {
		int i1 = Integer.MAX_VALUE;
		int i2 = i1 + 1;
		
		System.out.println(i1); // 2147483647
		System.out.println(i2); // -2147483648
	}
}

우리가 원하는 결과값인 2147483648가 아닌 -2147483648 값이 결과로 나오는 것을 확인할 수 있다. 해당 결과가 나온 과정은 다음과 같다.

즉, 정수형 int 타입의 변수가 가질 수 있는 값의 범위는 -2^31(-2147483648) ~ 2^31-1(2147483647) 이므로 이를 넘어서는 숫자를 다루게 될 경우 Overflow가 발생할 수 있다. 따라서 정수형 타입의 변수를 다룰 경우에는 Overflow 발생 여부를 고려하여 변수를 사용하여야 한다.


실수형의 Primitive type

실수형 변수를 이용하여 2.0 - 1.1의 연산 과정을 수행할 경우 우리가 원하는 결과 값은 0.9이지만 Java의 결과값은 다음과 같다.

📎 Code

public class Main {
	public static void main(String[] args) {
		float f1 = 2.0f;
		float f2 = 1.1f;
		float f3 = f1 - f2;
		System.out.println(f3); // 0.9
		
		double d1 = 2.0;
		double d2 = 1.1;
		double d3 = d1 - d2;
		System.out.println(d3); // 0.8999999999999999
	}
}

0.9가 아닌 0.8999999999999999가 결과값으로 나온 것을 확인할 수 있다. 컴퓨터는 2진수를 다루기 때문에 정확한 실수값이 아닌 해당 실수값에 근사한 값을 사용하기 때문에 발생하는 문제이다.

즉, 실수형 타입의 변수를 이용하여 연산 작업을 수행할 때 부정확한 연산 결과가 나올 수 있다는 것을 의식하고 코드를 작성해야 한다.

profile
목적 있는 글쓰기

0개의 댓글