1. 정의
형변환, 또는 타입변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
이를 통해 상황에 맞게 타입을 변환하여 적절히 사용할 수 있게 된다.
2. 자동 형 변환(자동 타입 변환)
작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장되는 것으로 자동으로 변환된다.
byte < short < int < long < float < double
※ float(4byte)가 long(8byte)보다 큰 타입으로 인식되어 자동 형 변환이 되는 이유는 표현할 수 있는 값의 범위가 더 크기 때문
(1) int → long = long으로 자동 형변환
int 곱하기 long = long으로 자동 형변환
1
2
|
intVal = 200;
long longVal = intVal;
|
cs |
(2) int → float = float로 자동 형변환
int 곱하 float = float로 자동 형변환
1
2
3
|
int intValue = 2
float floatResult = intValue * 2.34f;
|
cs |
※ float은 숫자 뒤에 f를 붙여주면 된다
(3) int → double = double로 자동 형 변환
int 곱하기 double = double로 자동 형 변환
1
2
|
int intVal = 15;
double doubVal = intVal;
|
cs |
doubVal의 값은 15.0으로 자동 변환 된다.
(4) 숫자 + 문자열(String)을 하면 숫자는 문자열로 자동 형변환이 되어 이어 붙여진다.
1
2
3
|
String kirby = "커비";
String addkirby = kirby + 100;
System.out.println(addkirby);
|
cs |
결과 값은 커비100이라고 하는 문자열이 된다. 이 안의 100은 문자열로서만 기능하게 된다.
3. 강제 형 변환 (강제 타입 변환)
큰 상자에 들어갈 크기의 케이크를 작은 상자에 모두 넣을 수는 없는 것처럼 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환이 되지 않는다. 그렇기에 작은 상자에 들어갈 수 있도록 작게 잘라야만 한다. 이를 강제 형변환이라고 한다.
결국 강제 형변환은 큰 데이터 타입을 작은 데이터 타입으로 잘라서 저장하는 것이다.
(1) double → int
1
2
3
|
double dobleVal = 5.55553
intVal = (int)dobleVal
System.out.println(intVal)
|
cs |
intVal의 값은 5로 출력된다.
4. 형 변환에서 주의해야 하는 부분
(1) 많이 하는 실수!
1
|
double result = 10 / 3;
|
cs |
위에서 선언한 result는 double형이지만 초기화 값이 int 나누기 int이므로 3.0으로 표현된다.
3.333333... 으로 표현하려면 어떻게 해야 할가?
방법 1 : 숫자 두 개 중 하나를 형변환 해준다
1
|
double result2 = (double) 10 / 3;
|
cs |
방법 2 : 숫자 두 개 중 하나를 소수로 바꿔준다.
1
|
double result1 = 10 / 3.0;
|
cs |
(2) 숫자 문자열과 숫자간의 형변환
1
2
|
String strNum = "123";
System.out.println(strNum + 2);
|
cs |
위에서 선언한 123은 숫자로 출력되지만 타입은 문자이다
그렇기에 strNum + 2을 하면 덧셈이 되는 것이 아니라 2도 문자로 자동 형변환이 되어 아래 그림처럼 이어 붙여서 출력된다.
그렇다면 문자열을 숫자로 형변환하려면 어떻게 해야할까?
바로 Integer.parseInt(숫자 문자열)나 Double.parseDouble(숫자 문자열)로 형변환을 해줘야 한다.
① 정수를 문자열로 형변환
1
2
|
int intNumCast = Integer.parseInt(strNum);
System.out.println(intNumCast + 2);
|
cs |
② 실수 문자열을 실수로 형변환
1
2
3
|
strNum = "50.23";
double doubNum = Double.parseDouble(strNum);
System.out.println(doubNum + 5);
|
cs |
그러면 다음과 같이 값이 출력된다.
댓글