본문 바로가기
JAVA

[JAVA] 데이터 형 변환 (묵시적, 명시적)

by Amy IT 2022. 5. 17.

데이터 형 변환이란 프로그램 실행 중 연산 같은 작업을 통해 새로운 데이터 형으로 변경되는 것을 말합니다. 

 

 

1. 묵시적 형 변환

 

(1) byte -> short -> int -> long -> float -> double : 작은 타입에서 큰 타입으로

 

byte타입인 10이 short타입인 b2에 저장되며 자동으로 short타입으로 변경됩니다. 이하 마찬가지로 형 변환이 자동으로 이루어지며 마지막에는 실수인 10.0이 출력됩니다. 

byte b = 10;
short b2 = b;
int b3 = b2;
long b4 = b3;
float b5 = b4;
double b6 = b5;
System.out.println(b6); // 10.0

 

 

(2) char -> int : 문자형에서 정수형으로

 

char는 하나의 문자를 저장하지만 내부적으로 char는 수치형입니다. 'A' 문자를 저장할 때 아스키 코드값인 65로 저장되며, 연산시 자동으로 정수형으로 변환됩니다. 정수형인 num 변수에 c를 저장하면, char 형인 'A'가 자동으로 int 형 65로 변환된 후 저장되어 num을 출력시 65가 출력됩니다. 

char c ='A';
System.out.println(c+1); //66
int num = c;
System.out.println(num); //65

 

 

(3) int보다 작은 타입의 연산 결과는 int로 묵시적 변환

 

다음과 같이 short타입끼리의 연산도 연산 결과는 자동으로 int타입으로 변환됩니다. 따라서 연산 결과를 short 타입의 변수에 저장하려 하면 오류가 발생합니다. 

short x = 10;
short x2 = 20;
//short x3 = x+x2; //오류
int x3 = x+x2;

 

 

(4) 정수형과 실수형의 연산 => 실수형으로 변환

 

정수와 실수를 연산하면 결과는 실수형으로 자동 형 변환되어 저장됩니다.

int p = 100;
double p2 = 3.14;
double p3 = p+p2;
System.out.println(p3); //103.14

 

 

(5) 문자열 + 문자열이 아닌 데이터 => 연결된 문자열로 반환

 

문자열은 연산할 수 없습니다. 문자열에 함께 쓰인 +는 문자열로 이어붙인다는 의미이며, String타입이 아닌 데이터도 자동 형 변환되어 연결된 문자열이 됩니다. 첫 번째 예시는 왼쪽부터 문자열 10에 1, 2, 3을 이어붙인 10123이 출력되며, 두 번째는 왼쪽부터 1+2+3이 6으로 연산된 후 문자열 10과 이어붙인 610이 출력됩니다. 

System.out.println("10"+1+2+3); //10123 
System.out.println(1+2+3+"10"); //610

 

 

 

2. 명시적 형 변환

 

(1) 큰 타입에서 작은 타입으로

 

앞서 작은 타입에서 큰 타입으로 자동 형 변환이 되는 것을 확인했습니다. 이와 달리 큰 타입 데이터를 작은 타입으로 저장하고 싶을 때는 명시적으로 데이터 형을 변경해야 합니다. 다음과 같이 int형 10을 short형에 저장하고 싶을 때 괄호 안에 데이터 형을 명시하여 데이터 형을 변경할 수 있습니다. 

int n = 10;
short n2 = (short)n;

 

연산 후에는 자동으로 int형으로 변환되기 때문에, 연산한 결과값을 작은 타입 데이터로 저장하고 싶을 때도 명시적 형 변환이 필요합니다.

short x = 10;
short x2 = 20;
short x3 = (short)(x+x2);

 

 

(2) 문자열에서 정수형 또는 실수형으로 

 

Integer.parseInt 함수로 문자열을 정수형으로 변환할 수 있고, Double.parseDouble 또는 Float.parseFloat 함수로 실수형으로 변환할 수 있습니다. Integer.parseInt 함수는 활용도가 높으니 기억해 두는 것이 좋습니다. 

String k = "10";
System.out.println(k+20); //1020
int k2 = Integer.parseInt(k); //정수형으로 변환
System.out.println(k2+20); //30 
double k3 = Double.parseDouble(k); //실수형으로 변환
System.out.println(k3);  //10.0

 

 

(3) 문자열로 변환

 

String.valueOf 함수를 사용하면 문자열이 아닌 데이터를 문자열로 변환할 수 있습니다. 

System.out.println(String.valueOf(10)+10); //"1010"
System.out.println(String.valueOf(3.14)); //"3.14"

 

 

이상으로 기본적인 데이터 형 변환에 대한 내용을 정리해 보았습니다. 

 

 

댓글