Type Conversion

김남건·2021년 7월 19일
0

Java - 1. 기본 문법

목록 보기
4/6
post-thumbnail

Implicit Conversion

묵시적(자동) 타입 변환으로 연산에서 컴파일러가 자동으로 수행하는 타입 변환을 말한다.

Java에서는 데이터 손실이 발생하지 않거나, 최소화되는 방향으로 implicit conversion을 한다. 따라서 다음과 같은 방향으로 변환이 이루어진다.

byte형 → short형 → int형 → long형 → float형 → double형
           char형 ↗

또한, 데이터 손실이 발생하는 대입 연산은 허용되지 않는다.

더 넓은 범위를 가지는 타입으로의 변환

double num1 = 10;
int num2 = 3.14; // error
double num3 = 7.0f + 3.14;

첫 줄의 경우 int 값이 double형 변수에 대입되므로 int 값이 double로 변환된다.

두번째 줄의 경우 float형 값을 int 변수에 대입하면 데이터 손실이 발생함므로 에러가 발생한다.

세번째 줄의 경우 float와 double의 덧셈 연산을 위해 float 값이 double로 변환된다.

더 좁은 범위를 가지는 타입으로의 변환

byte num1 = 100;        // OKbyte num2 = 200;        // Type mismatchint num3 = 9876543210;  // Out of rangelong num4 = 9876543210; // Out of rangefloat num5 = 3.14;      // Type mismatch

1번의 경우 int가 byte로 변환되는 경우지만 byte가 100이라는 값을 담을 수가 있어서 허용된다.

2번의 경우 byte가 200이라는 값을 담지 못하지 때문에 에러가 난다.

3, 4번의 경우 9876543210이라는 값이 int의 범위에서 벗어나기 때문에 int literal로 적을 수가 없다. 따라서 Out of range이다. 리터럴 값 뒤에 L를 붙여주면 4번은 정상 동작할 것이다.

5번의 경우 float의 표현 범위를 벗어난 double형 값이 할당되는 것이므로 에러가 발생한다.

Explicit Conversion

명시적 타입 변환으로, 사용자가 타입 캐스트 연산자를 사용하여 강제적으로 하는 타입 변환이다.

int num1 = 1, num2 = 4;double result1 = num1 / num2; // 0.0double result2 = (double) num1 / num2; // 0.25

1번의 경우 int 끼리의 나눗셈 연산에서 몫에 해당하는 0이 반환되고 이 값이 double로 변환되어 0.0이 할당된다.

2번의 경우 double과 int의 연산이므로 int형 값이 double로 변환되어 나눗셈이 실행된다. 그래서 반환된 값인 0.25가 변수에 할당된다.

Reference

http://tcpschool.com/java/java_datatype_typeConversion

0개의 댓글

관련 채용 정보