Java Promotion Casting

Java Promotion Casting



■ 이번 글에서는 자바 자료형의 [형변환]에 대해서 정리해보자. 형변환이란 어떤 자료형에 저장되어 있는 값을 다른 자료형으로 옮기는 것을 말한다. 예를 들어 작은 값을 큰 그릇으로 옮겨 담거나 반대로 큰그룻에 있는 값을 작은 그릇으로 옮겨 담는 것을 말한다. 작은 값을 큰 곳으로 옮기는 것을 프로모션(Promotion)이라고 하며, 큰 값을 작은 곳으로 옮겨 담는 것을 캐스팅 (Casting)이라고 한다.


 

 

 작은 데이터를 큰 곳으로 옮겨 담을 때는 따로 형변환 자체가 필요 없다. 단지 공간의 낭비가 있을 뿐이다. 

byte x = 100;

int y = x;

이처럼 작은 단위의 x값을 큰 단위인 y에 저장하는 것은 당연한 것이다. 하지만 반대로....

int x = 100;

byte y = x; (error)

byte보다 큰 데이터인 int형 x를 바이트에 대입할 때는 반드시 변환하고자 하는 형태의 자료형의 (casting)연산자를 넣어줘야 에러가 발생하지 않는다. 

byte y = (byte)x;


 

 

 이렇게 큰 자료형을 작은 자료형에 담을 때만 casting 연산자를 넣어주면 되는데 한가지 주의할 점이 있다. char의 형변환인데.... char는 유일한 unsigned 자료형으로 저장할 수 있는 값은 0~65,535이다. 즉, 음수를 저장할 수 없기 때문에 주의해야 한다.

short x = 100;

char y = x; (error)

short는 (-32,768~32,767)의 값을 저장할 수 있고, char는 (0~65,535)의 값을 담을 수 있다. 만약 프로모션이 일어나기 위해서는 char가 short의 데이터를 모두 포함할 수 있어야 하지만..... char는 음수를 담을 수 없기 때문에 short를 char에 담을 때는 반드시 casting을 해줘야 한다. 


 다음은 정수와 실수의 관계를 정리해본다. 정수형 long은 8byte이고 float는 4byte이다. 일반적으로 생각할 때 long형을 float에 넣을 때는 큰 자료형이 작은 자료형으로 들어가기 때문에 당연히 cating이 발생한다고 생각할 수 있지만, Promotion이 발생한다. 실수는 정수보다 무조건 크다고 개념을 정리해야 한다. 그렇기 때문에 실수형을 정수형에 담을 때는 무조건 casting을 해줘야 한다. 

float x = 15.5f;

long y = (long) x;

이렇게 캐스팅을 해주지 않으면 에러가 발생한다. 주의하자.