Programming/Java

JAVA - 자료형 형변환 주의할 점

seandoesdev 2023. 6. 18. 20:13

자료형 형변환 주의할 점에 대해서 말하기 전에 기본 자료형의 크기와 컴퓨터가 실수를 표현하는 방법인 부동소수점(Floating Point)에 대해 설명하겠다.

 

정수 타입의 자료형 종류 및 크기

  • byte(1byte)
  • short(2byte)
  • int(4byte)
  • long(8byte)

실수 타입의 자료형 종류 및 크기

  • float(4byte)
  • double(8byte)

정수 타입의 자료형은 각자의 크기 내에서 일정한 수를 가질 수 있지만, 실수 타입의 자료형은 IEEE에서 개발한 IEEE 754 Floating Point 부동소수점 표기법을 따른다.

 

부동소수점 표기법은 아래 사진과 같다.

ref: https://en.wikipedia.org/wiki/IEEE_754

 

float형의 경우 가수부의 크기는 23bit로 데이터 표현 가능 크기는 2^23 - 1(=8,388,607)이다. 그럼 이 크기보다 큰 값을 갖는 정수형의 데이터(int)가 실수형 데이터(float)로 변환 된다면 어떻게 되겠는가?

 

코드로 작성해서 봤을 때 큰 변화가 없는 것을 확인할 수 있으나, 메모리에서의 값은 서로 다른 값으로 된다. 이 문제를 정밀도 손실이라고 한다.

int형에서 float형으로 형변환했을 때, 정밀도 손실이 일어나는 경우, float보다 큰 double형을 사용하면 된다.

 

형변환으로 인한 여러 문제점들이 있지만 그 부분에 대해서 추가적으로 작성할 예정이고, 해결방안 혹은 방지법을 찾아서 이 글에 남겨 놓을 것이다.