Java] Type Conversion, 형 변환

Implicit Conversion, 자동 형 변환

자동 형 변환, 묵시적 형 변환, 암시적 형 변환이라고도 불린다.

Promotion(타입 확장)

1
2
3
int numInt = 3;
long numLong = numInt;
System.out.println(((Object)numLong).getClass().getTypeName()); //java.lang.Long

화살표 방향으로는 자동 형 변환이 이뤄질 수 있다.

자동 형 변환에서는 데이터 손실이 이뤄지지 않는다.

Explicit Conversion, 명시적 형 변환

Casting(타입 축소) 과정에서 데이터의 손실이 이뤄질 순 있지만, 형 변환이 필요할 때 사용

흔한 예로서 파이썬에서 소수점이 나왔을 때 int(value)를 통해 소수점의 값을 버리고 정수값을 가져오는 코드를 알고리즘에서 많이 사용한다. 자바에서는 아래와 같이 처리한다.

1
2
3
float numFloat = 3.14f;
int numInt = (int) numFloat;
System.out.println(numInt); //3

Problem]

아래의 코드는 몇 번의 형 변환이 이뤄지는가?

1
2
3
4
5
6
7
8
// 1번
int num = 5;
System.out.println(num * 2.2);

// 2번
int n = 5;
n *= 2.2;
System.out.println(n);

1번의 경우는 결과값이 11.0이 나오므로 1번의 형 변환(Promotion)이 이뤄진다.

2번의 경우는 결과값이 11이 나온다.
총 2번의 형 변환이 이뤄지는데 첫 번째는 2.2를 곱한 11.0인 double형태로 Promotion이 이뤄지고, n이 int형으로 선언 되었기에 2번째 형 변환으로 Casting이 이뤄져 int형의 값이 나오게 된다.