본문 바로가기
Java/Java 기초문법

[JAVA 기초] 형변환(casting)

by dev수니 2021. 2. 26.
반응형

형변환은 변수나 상수의 데이터 타입을 다른 타입으로 바꾸는 것을 의미한다.

형변환에는 자동 형변환과 명시적 형변환이 있다.

 

 1  자동 형변환

작성자가 별도의 작업을 하지 않아도 자바가 알아서 알맞은 타입으로 변환해 주는 것을 말한다.

작은 데이터 타입에서 큰 데이터 타입으로 형변환하여도 데이터의 손실 없이 그대로 보존될 수 있기 때문에 자동 형변환이 일어난다.

byte a = 127;  // byte가 가질 수 있는 최댓값
int b = a;
System.out.println(b);

float c = b;
System.out.println(c);

결과
127
127.0

다음은 char 타입의 데이터 형 변환이다.

char ch = 'a';
int b = ch;
System.out.println(b);

결과
97

char타입은 문자형인데 어떻게 정수형으로 넣을 수 있을까?

답은 char 타입의 a가 int 타입으로 형변환 될 때 아스키코드값인 97로 저장되기 때문이다.


 2  명시적 형변환

프로그래머가 변수의 자료형을 강제로 변환하는 것을 말한다.

큰 데이터 타입에서 작은 데이터 타입으로 옮길 때 데이터의 손실이 발생할 수 있기 때문에 예상치 못한 결과를 얻을 수 있다.

 

○ 정수형간의 형변환

int a = 263;
byte b = (byte)a;
System.out.println(b);

int i = 10;
byte j = (byte)i;
System.out.println(j);

결과
7
10

byte 타입은 저장할 수 있는 값의 범위가 -128~127이기 때문에 263을 넣었을 때 예상치 못한 값이 나온 것을 볼 수 있다.

 

○ 실수형간의 형변환

double d1 = 1.1234;
float f1 = (float)d1;
System.out.println(f1);

결과
1.1234

다음과 같이 범위 내 값에서 강제 형변환 할 경우 데이터의 손실없이 변환된다.

 

하지만 f1의 값이 

float이 가질 수 있는 최소 값보다 작은 경우 0이 되고

float이 가질 수 있는 최대 값보다 큰 경우 무한대(infinity)가 된다.

 

또한 float의 범위 내 값이지만 소수점 아래 값에서의 정밀도 차이가 나기도 한다.

double d4 = 9.123456789;
float f4 = (float)d4;
System.out.println(f4);

결과
9.123457

 

○ 정수형과 실수형 간의 형변환

double a = 12345.15453;
int b = (int)a;
System.out.println(b);

결과
12345

실수형을 정수형으로 형변환시 소수점 이하 값은 버려진다.

반응형

댓글