java

[JAVA] 기본 자료형간의 타입변환, 연산

dackyy 2022. 7. 9. 16:02
반응형

boolean을 제외한 기본 자료형 7 개는 자료형을 서로 변환할 수 있는데, 이를 '타입 변환' typecasting 이라고 한다.

자바는 항상 대입 연산자 ( = ) 를 중심으로 왼쪽에서 오른쪽 자료형을 일치시켜야 하므로 타입 변환을 수행해야 할 때가 있다.

타입 변환 방법은 단순히 변환 대상 앞에 ( 자료형 ) 만 표기하면 된다.

정수나 실수 리터럴은 숫자 뒤에 L이나 F를 붙여 각각 long, float 로 타입 변환을 수행할 수도 있다.

int value1 = (int) 5.3; //값이 5로 변경
long value2 = 10L;
float value3 = 5.8F;

1. 자동 타입 변환, 수동타입변환  (casting)

크기(범위) 가 작은 자료형을 큰 자료형에 대입할 때를 업 캐스팅(up casting) 이라고 한다. 이때는 어떠한 데이터 손실도 발생하지 않는다. 따라서 업캐스팅을 할 때는 개발자가 코드를 넣지 않아도 컴파일러가 자동으로 타입 변환을 실행하는데, 이를 자동 타입 변환이라고 부른다.

업캐스팅이 아닌데도 자동 타입 변환이 적용되는 때가 있다. 사실 모든 정수 리터럴값은 int 자료형으로 인식 된다. 하지만 byte , short 자료형에 저장할 수 있는 범위 내의 정수 리터럴 값이 대입될 때에는 각각의 자료형으로 자동 타입 변환된다. 

반대로 다운 캐스팅 (down casting)은 언제 일어날까? 

다운 캐스팅은 큰 자료형을 작은 자료형에 대입하는 행위를 말하는데 이때는 데이터 손실이 발생할 수 있으므로 컴파일러에 다른 자동 타입변환은 일어나지 않고, 개발자가 명시적으로 타입 변환을 수행해야 한다.

float value1 = 3; 	// int -> float (업 캐스팅)
long value2 = 5; 	// int -> long 	(업 캐스팅) 
double value3 = 7; 	// int double 	(업 캐스팅)
byte value4 = 9; 	// int -> byte	
short value5 = 11; 	// int -> short
int value6 = 12.5;  	// 12.5 -> 12 	(다운 캐스팅)

2. 기본 자료형 간의 연산

boolean을 제외한 나머지 기본 자료형은 서로 연산할 수 있다. 이때 모든 연산은 같은 자료형끼리만 가능하며 연산 결과 역시 같은 자료형이 나온다. 단, int보다 작은 자료형간의 연산결과는 int가 나온다. 예를들어 byte + byte, short + short, byte + short 의 결과 자료형은 int 이다. 이는 CPU에서 연산 최소 단위가 int 이므로 이보다 작은 자료형을 int로 읽어와 계산하기 때문이다. 

연산 결과
byte  +  byte int 자료형
short  +  short int 자료형
int  +  int int 자료형
long  +  long long 자료형
float  + float  float 자료형
double  + double double 자료형

그렇다면 int 보다 큰 자료형은 계산할 수 없을까? 가능하다. 바로 위에서 배운 업 캐스팅을 활용하면 된다. 업캐스팅은 자동 타입 변환이므로 int + long 을 연산하게 되면 int 를 자동 타입 변환해 long + long 으로 계산한다. 

연산 결과
byte +  short int 자료형
byte  +  int int 자료형
short  +  long long  자료형
int  +  float  float 자료형
long + float long 자료형
float  + double double 자료형

더하기 연산만 적용 되는 것이 아닌, 모든 연산에 적용된다.

반응형