JAVA 자동 타입 변환

Dante·2023년 6월 24일

자동 타입 변환은 말 그대로 자동으로 타입 변호나이 일어나는 것을 말한다. 자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

자동타입변환 예시

- 허용범위가 작은 타입이 허용 범위가 큰 타입만 가능!
	byte < short, char < int < long < float < double

byte x = 10;
int y = x;	// int가 더 크므로 자동 타입 변환됨.

long x = 5000000000L;
folat y = x;	// 5.0E9F 저장됨
double z = y;	// 5.0E9 저장됨

char x = 'A';
int y = x; 	// 65가 저장됨

- 예외!
byte보다 char가 허용 범위가 넓으나, byte는 char로 자동 변환될 수 없다.
char 타입은 음수를 포함하지 않기 때문!

byte x = 65;
char y = x; 	// 컴파일 에러!

강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 변환될 수 없다.
다만 강제 타입 변환(casting)을 통해 강제로 변환시킬 순 있다.
	
    //casting. byte단위로 앞자리를 짤라서 강제로 변환하다고 보면 된다.
	작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입;
   	

int x = 10;
byte y = (byte) x;	// 강제 타입 변환

double x = 3.14;
int y = (int) y;	// 정수 부분인 3만 저장

연산식에서 자동 타입 변환

자바는 컴파일 단계에서 연산을 수행한다. 아래의 식은 컴파일 단계에서 byte 타입 X에 30이라는 값을 저장해둔다.
	byte x = 10 + 20;

- 정수 연산

그러나 변수가 피연산자로 사용되면 실행 시 연산을 수행한다. 정수 타입 연산자가 산술 연산식에서 비연산자로 사용되면 
int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행한다.

byte x = 10;
byte y = 20;
	byte result = x + y	// 컴파일 에러
int result = x + y;	// 정상


- 실수 연산

float x = 1.2f + 3.4f;	//float x = 4.6f;
// 피연산자 중 하나가 double 타입이면 double 타입으로 변환된다.
double x = 1.2f + 3.4;	// double x = 4.6;

- int와 double의 연산

int x = 10;
double y = 5.5;
double z = 10 + 5.5		// 10.0 + 5.5

// int 타입으로 연산하려면 강제 변환하여 수행한다.
int x = 10;
double y = 5.5;
int z = x + (int) y 	// 10 + 5

문자열의 +연산

자바에서 피연산자 중 문자열이 있을 경우 나머지 피연산자도 문자열 결합 연산을 수행한다.

int x = 3 + 7; 	// 10
String str = "3" + 7;	// "37"
String str = "3" + "7";	// "37"
String str = 1 + 2 + "3";	// 3 + "3" -> "33"
String str = 1 + "2" + 3;	// "123"

String str = "1" + (2+3);	// "1" + 5 -> "15"

문자열을 기본 타입으로 변환

문자열을 숫자 타입으로 변환하는 경우가 많다. 다음과 같은 방법으로 변환 가능하다.
String str = "1000";

byte x = Byte.parseByte(str);
short x = Short.parseShort(str);
int x = Integer.parseInt(str);
long x = Long.parseLong(str);
float x = Float.parseFloat(str);
double x = Double.parseDouble(str);
boolean x = Boolean.parseBoolean(str);

반대로 기본 타입을 문자열로 바꾸려면 아래와 같이 처리하면 된다.

String str = String.valueOf(기본값);
profile
거북이처럼!

0개의 댓글