카테고리 없음

Java 자동 형변환과 강제 형변환

MJHmong 2022. 10. 22. 19:30

 

자동 타입 변환 ( promotion )

자동으로 타입 변환이 일어나는 것을 의미하며, 값의 허용 범위가 작은 타입이 큰 타입으로 대입될 때 발생한다.

 

기본 타입을 허용 범위 순으로 적어보면 아래와 같다.

byte < short
char < int < long < float < double
int intValue = 10;

// 자동 형변환 OK.
// int보다 long이 허용범위가 더 큼.
long longValue = intValue;

// Error...
// long은 int보다 허용 범위가 작기에 자동 형변환 불가
intValue = longValue;

 

강제 타입 변환 ( Casting )

위 예제에서 큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 불가함을 확인했다.

이때 큰 허용 범위 타입을 작은 허용 범위의 타입으로 저장하는것을 강제 타입 변환이라고 하며 (타입) 를 사용한다.

 

단 강제 타입 변환은 허용 범위가 큰 타입을 허용 범위가. 작은 타입으로 구겨넣는? 방식으로 변환하기에 값 유실에 대해 조심해야한다.

해당 예제를 코드로 확인해보자.

byte byteValue = Byte.MAX_VALUE;
System.out.println("byte타입의 MAX_VALUE는 " + byteValue + " 입니다.");

int intValue = 200;
System.out.println("int에 대입된 값은 " + intValue + " 입니다.");

byteValue = (byte) intValue;
System.out.println("int에 할당된 200을 byte로 강제변환하여 할당하면 " + byteValue + " 값으로 할당됩니다.");

/**
 * 출력결과
 * byte타입의 MAX_VALUE는 127 입니다.
 * int에 대입된 값은 200 입니다.
 * int에 할당된 200을 byte로 강제변환하여 할당하면 -56 값으로 할당됩니다.
 * */

위와같이 강제로 캐스팅 시에는 올바르지 않은 값이 할당될 수 있으므로 유의하여 사용이 필요하다.