본문 바로가기
Java

[Java] 형변환? 자동형변환과 그의 순서, 그리고 강제형변환

by 나는 개발자 2020. 12. 19.
TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.

 

형변환(Casting)

 

값(Data)의 자료형을 바꾸는 것

 

컴퓨터에서의 모든 값 처리 규칙은 대입 연산자(=)를 기준해서 좌항과 우항이 같은 자료형이어야 한다. 또한 같은 자료형끼리만 연산이 가능하며 결과 또한 같은 자료형으로 나오게 된다. 

 

다른 자료형의 값을 대입하고자 할 때 해주어야 하는 것이 "형변환"이다.

 

 

 

 

형변환 종류

 

1) 자동 형변환

사이즈가 작은 자료형과 큰 자료형의 대입, 계산 시 자동으로 작은 자료형이 큰 자료형으로 변환

 

 

 

사이즈가 작은 int는 double로 자동 형변환 된다.

여기서 자동 형변환이 되는 순서가 있는데, 순서는 아래와 같다.

 

순서를 보면 정수에서 실수로 넘어가는데 이 점이 특이하다. 

long은 8byte이고 float는 4byte지만 long에서 float로 형변환이 자동으로 가능하다는 점이다.

 

또한 char(문자)는 int(숫자, 정수)로 변환이 가능하다.

문자와 숫자가 서로 형변환이 가능한 이유는 각 문자마다 고유한 숫자가 정해져 있기 때문이다.

문자에 해당하는 숫자, 그리고 그 숫자에 해당하는 문자는"아스키코드표"와 "유니코드 표"를 참조하면 된다.

 

 

자동형변환에서 또 특이한 부분은 byte와 short 간의 연산이다.

연산 시 에러가 발생하는데, byte나 short는 연산시 무조건 int(4byte)로 처리하여야 한다.

해결방법은)

 

1. 박스를 int로 세팅하거나

2. int로의 형변환이 싫다면, 강제 형변환을 하여야 한다.

 

 

 

2) 강제(명시적) 형변환

강제형변환은 자동형변환이 되지 않을 때, 주로 큰 크기의 자료형을 작은 크기의 자료형으로 바꿀 때 실시한다.

 

 

[표현법] (바꿀자료형) 값 ; 

ex) double(8byte)을 float(4byte)로 강제형변환하기 

double d1 = 4.0;

float f1 = (float) d1; 

 

 

*강제형변환시 발생하는 문제점

 

데이터 손실

실수를 정수로 형변환을 하게 되면 소수점 자리의 숫자를 잃게 된다. 

 

 

해결방법 1. 수행 결과를 int형으로 강제형변환

해결방법 2. 실수의 값만 정수형으로 강제 형변환

해결방법 3. 그냥 연산 결과를 double로 담기 (자동형변환 가능하도록)

 

 

 

 

댓글