상세 컨텐츠

본문 제목

[JAVA] 형 변환(Casting)

프로그래밍/JAVA

by 으노로 2020. 6. 10. 21:21

본문

안녕하세요.

이번에는 형 변환에 대해서 공부하겠습니다.

형 변환은 값의 자료형을 바꾸는 것을 말합니다.

 

자료형마다 저장할 수 있는 값이 정해져있는데 이를 넘어가게 되면 오류가 발생하게 됩니다.

이를 오버플로우(Overflow)라고 합니다.

오버플로우의 예로 byte 변수는 +127까지 저장이 가능한데 이를 넘을 경우

+128이 아닌 -128로 값이 바뀌는 오류가 생기게 됩니다.

 

그리고 자바에서는 같은 종류의 자료형만 대입과 계산이 가능합니다.

또한 계산의 결과도 같은 종류의 자료형 값이 나와야 합니다.

예를 들어 int형 변수와 int형 변수의 대입과 계산은 가능하지만

int형 변수와 double형 변수의 대입과 계산이 불가능합니다.

 

오버플로우와 다른 자료형끼리의 대입과 계산을 위해서는 형 변환을 해주어야 합니다.

(단, boolean 자료형은 true, false만 저장하므로 다른 자료형으로 형변환이 불가능합니다.)

 

형변환 종류에는 자동 형 변환과 강제 형 변환이 있습니다.

자동 형 변환은 자동적으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환해주는 것을 말합니다.

 

숫자를 표현하는 자료형에 크기 순으로 정수는 byte(1byte) - short(2byte) - int(4byte) - long(8byte)가 있고

실수는 float(4byte) - double(8byte)가 있습니다.

각 자료형이 표현할 수 있는 값을 넘어갈 경우에는 더 큰 자료형으로 자동 형 변환이 되고

정수(int)+ 실수(double)의 경우에는 실수의 자료형으로 자동 형 변환됩니다.

(단, byte와 short 자료형 값의 계산 결과는 int로 처리됩니다.)

 

숫자와 문자의 자동 형 변환도 가능합니다.

char는 문자를 유니코드로 저장하는데 유니코드는 각각의 문자가 숫자 값을 가지고 있습니다.

이 유니코드 값을 가지고 문자와 숫자의 대입과 계산이 가능합니다.

1
2
3
4
5
int num = 'A';        // 65를 나타낸다.
char ch = 65;         // 'A'를 나타낸다.
 
int num = 'A' + 1;    // 66를 나타낸다.
char ch = 'A' + 1;    // 'B'를 나타낸다.

자동 형 변환을 봤으니 강제 형변환을 볼 차례인데요.

강제 형 변환은 범위가 큰 자료형을 범위가 작은 자료형으로 변환하려고 할 때 사용합니다.

강제 형 변환을 하게 되면 데이터 손실이 발생할 수 있습니다.

그럼에도 불구하고 강제로 자료형을 변환시켜줘야 할 때가 있습니다.

강제 형 변환은 변수 앞에 변환하고자 하는 자료형을 괄호()로 붙여서 변환합니다.

1
2
3
4
5
6
double dNum = 10.2;
int iNum = 5;
 
dNum + iNum;            // double 자료형으로 15.2
(int)dNum + iNum;       // double 자료형을 int자료형으로 형변환뒤에 iNum과 더해서 15
(int)(dNum + iNum);     // double과 int를 더한 뒤 int자료형으로 형변환해서 15

실수를 정수로 강제 형 변환하면 소수점을 없앤 정수 값이 저장됩니다.

 

문자와 숫자도 강제 형 변환이 가능합니다.

1
2
3
4
5
int num = 65;
(char)num;      // char로 강제 형변환해서 'A'
 
char ch = 'A';
(int)ch;        // int로 강제 형변환해서 65

강제 형 변환도 자동 형 변환과 마찬가지로 유니코드 값을 가지고 형 변환하게 됩니다.

이상으로 형 변환에 대해 공부했는데요.

기본 자료형의 형 변환만 다뤄봤지만 클래스나 배열 단위도 형 변환이 가능합니다.

수고하셨습니다. 그럼 다음 글에서 봬요.

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] 조건문  (0) 2020.06.12
[JAVA] 연산자(Operator)  (0) 2020.06.12
[JAVA] 변수(Variable)  (0) 2020.06.05
[JAVA] Eclipse 인코딩 언어 설정하기  (0) 2020.06.03
[JAVA] Eclipse 설치하기  (0) 2020.05.29

관련글 더보기

댓글 영역