본문 바로가기
카테고리 없음

Java - 형변환(타입변환, Casting)

by 스노위13 2022. 5. 2.

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 = (double10 / 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

그러면 다음과 같이 값이 출력된다.

댓글