Java

형변환(캐스팅,casting)이란?

다시초심으로 2024. 1. 19. 14:34

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는것이다.

예를들어, int타입의 값과 float타입의 값을 더하는 경우, 먼저 두값을 같은 타입으로,
즉, 둘다 float타입으로 변환한 다음에 더해야한다.

형변환방법

형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙혀준붙혀주면된다.

(타입)피연산자

예를들어, 

double d = 112.8;
int score = (int)d; //double타입의 변수를 int타입으로 형변환

int score = (int)112.8;	//변수 d의 값을 읽어와서 형변환한다.
int score = 112;	//형변환의 결과인 112를 변수 score에 저장한다.
변환 수식 결과
int -> char (char) 65 'A'
char -> int (int) 'A' 65
float -> int (int) 2.8f 2
int -> float (float)42 42.0f

ps. 실수형에서 정수형으로 형변환을 한다고 반올림이 발생하지는 않는다.
ex) 1.666 -> 1    (int타입으로 형변환)

 

자동 형변환

서로 다른 타입간의 대입이나 연산을 할 때, 형변환으로 타입을 일치시키는 것이 원칙이다.
하지만, 경우에 따라 편의상의 이유로 형변환을 생략할 수 있다. 
형변환이 이루어지지 않는것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가한다.

int i = 6;
double d = 2.0 + i; //double d = 6.0 + (double)i;에서 형변환이 생략됨.

double d = 1.0 + (double)i;
double d = 1.0 + (double)6; //6을 double타입으로 형변환하면 6.0이 된다.
double d = 1.0 + 6.0;  //double과 double의 덧셈결과 타입은 double이다.
double d = 7.0;  //double + double = double

 

자동 형변환의 규칙

형반환을 하는 이유 ?     => 서로 다른 두 타입을 일치시키기 위해서.
하지만,  형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.

컴파일러는 어떤 판단기준으로 타입을 일치시킬까?

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환 한다.

byte(1byte) -> short(2byte) -> int(4byte) -> long(8byte) -> float(4byte) -> double(8byte)
                       char(2byte) ->

long이 float보다 byte가 더 크지만, 표현범위가 실수형이 정수형보다 더 크기때문에 float가 오른쪽에 위치해있다.

정리

1.boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
2.기본형과 참조형은 서로 형변환할 수 없다.
3.서로다른 타입의 변수간의 연산은 형변환을 하는것이 원칙이지만,
값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.

'Java' 카테고리의 다른 글

오버로딩(overloading) & 오버라이딩(overriding)  (0) 2024.02.01
Java 상속(inheritance)  (0) 2024.01.24
JVM(Java Virtual Machine) 이란?  (0) 2024.01.17
자바 특징 정리  (0) 2024.01.17
[Java] 트랜잭션(transaction)에 대해서  (0) 2024.01.16