형변환(Casting)이란?
변수나 리터럴 타입을 다른 타입으로 변환하는 것을 '형변환(Casting)'이라 한다.
주로 타입이 다른 값들을 계산하는 경우 사용된다. 타입이 다른 값들은 같은 타입으로 변환한 다음에 계산하여야 한다.
형변환 방법
(타입)피연산자
와 같은 형식으로 바꾸어준다.
dobule height = 188.2;
int hello = (int)height;
// hello = 188
// height = 188.2
기본형(primitive type)에서 boolean을 제외한 나머지 모든 타입들은 서로 형변환이 가능하다.
정수형 간의 형변환
int(4 byte)를 byte(1 byte)로 변환하는 경우 값의 손실(loss of data)이 발생한다.
반대로 작은 타입에서 큰 타입으로 변환하는 경우 남은 공간은 0으로 체운다. 단, 변환하려는 값이 음수인 경우 빈 공간을 1로 체운다.(2의 보수)
실수형 간의 형변환
실수형에서도 정수형과 같이 작은 타입에서 큰 타입으로 변환하는 경우, 빈 공간을 0으로 체운다.
(float타입의 범위를 넘는 값을 float로 형변환 하는 경우 ±무한대 또는 ±0이 된다.)
정수형을 실수형으로 변환
정수는 소수점이하의 값이 없으므로 정수를 2진수로 변환한 다음 실수로 저장된다.
하지만 실수형의 정밀도 제한으로 인해 오차가 발생할 수 있다.
91234567 - (float) → 91234568.0 - (int) → 91234568
91234567 - (double) → 91234567.0 - (int) → 91234567
int는 약 20억으로10자리의 정밀도, float는 10진수로 7자리의 정밀도를 제공하므로 오차가 발생할 수 있다.
따라서 8자리 이상의 값을 실수형으로 변환할때는 double을 사용해야 한다.
실수형을 정수형으로 변환
실수형을 정수형으로 변환하는 경우에는 실수형의 소수점 이하 값은 버려진다.
만약 실수의 소수점을 버리고 남은 정수가 정수형의 범위를 넘는 경우에는 오버플로우가 발생한 결과를 얻는다.
자동 형변환(Implict Conversion)
형변환을 생략한 경우, 컴파일러가 알아서 자동 형변환을 해준다.
묵시적 형변환(왼쪽 → 오른쪽)의 경우 컴파일러가 알아서 해주며 명시적 형변환(오른쪽 → 왼쪽)의 경우 형변환 연산자를 반드시 사용해주어야 한다.
char과 short는 둘다 2byte지만 서로 범위가 달라서 어느쪽으로 형변환하더라도 손실이 발생할 수 있으므로 자동형변환 되지 않는다.
'Language > Java' 카테고리의 다른 글
Java while문 그리고 do, continue, break (0) | 2019.06.08 |
---|---|
객체지향 프로그래밍 (0) | 2019.05.24 |
Java 변수 기본형과 참조형 (0) | 2019.03.17 |
Java serialVersionUID 사용이유 (0) | 2019.03.09 |
Java String... 은 무엇인가? (1) | 2019.03.08 |