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 자료형 |
더하기 연산만 적용 되는 것이 아닌, 모든 연산에 적용된다.
'java' 카테고리의 다른 글
[JAVA] 야구게임 맞추기 (0) | 2022.07.30 |
---|---|
[JAVA] 배열의 생성과 자료형 (0) | 2022.07.09 |
[JAVA] 제어문 (1) | 2022.07.09 |
[JAVA] 연산자의 종류 (0) | 2022.07.09 |
[JAVA] 자바의 자료형 (Data Type) (0) | 2022.07.09 |