[Java] 변수(Variable)_4 (타입 변환)

SeoYoon·2023년 6월 8일

💗JAVA

목록 보기
6/21

🖤변수

1. 타입 변환

example)

byte a = 10; // byte 타입 변수 a에 10을 저장
int b = a; // byte 타입 변수 a에 저장된 10을 int 타입 변수 b에 복사해서 저장

-> 원래 10은 byte타입의 값이었지만, 저장할 때 int 타입의 값으로 변환


2. 자동 타입 변환 (Promotion)

: 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생, 프로그램 실행 도중에 자동으로 일어남.

🍒 기본 타입 허용 범위 크기순으로 정리

byte < short < int < long < float < double

  • 정수 타입이 실수 타입으로 저장될 경우에는 무조건 자동 타입 변환이 일어남 ( 정수 범위 < 실수 범위 )
  • byte 타입은 char 타입으로 자동 타입 변환될 수 없음 -> char 타입은 음수를 포함하지 않지만 byte 타입은 음수를 포함하기 때문
  • char 타입의 경우 int 타입으로 자동 변환되면 유니코드 값이 int 타입에 저장됩니다.
byte byteValue = 10;
int intValue = byteValue; // int 타입으로 자동 타입 변환

3. 강제 타입 변환 (Casting)

: 큰 허용 범위 타입은 작은 허용 범위의 타입으로 자동 형변환 되지 않기 때문에 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장해야 한다.

int intValue = 10;
byte byteValue = (byte) intValue; // 강제 타입 변환

-> int 타입은 byte 타입보다 큰 허용 범위를 가져서 (byte)캐스팅 연산자를 사용해서 byte 타입으로 강제 변환

int intValue = 10;
char charValue = (char) intValue;
Systemout.println(charValue);

-> int 타입은 char 타입보다 큰 허용 범위를 가지기 때문에 (char) 캐스팅 연산자를 사용해서 char 타입으로 강제 변환


4. 정수 연산에서의 자동 타입 변환

: 정수 타입의 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행함

byte x = 10;
byte y = 20;
// byte result = x + y; 로 출력하면 컴파일 에러 발생 
// -> byte 변수 x, y가 피연산자로 사용되면 int 타입으로 변환되어 연산되므로 
// 연산 결과를 byte 변수에 저장할 수 없음(int 변수에 저장해야 함)
int result = x + y; // int result에 값을 저장해야 올바르게 출력됨


int x = 10;
int y = 20;
int result = x + y; // 처음부터 타입을 int로 설정해두면 타입 변환이 줄어들어 코드가 깔끔해진다.

TIP : int 타입보다 허용 범위가 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 무조건 long 타입으로 변환하고 연산을 수행하기 때문에 연산 결과를 long 타입 변수에 저장해야 함


5. 실수 연산에서의 자동 타입 변환

: 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double 타입으로 자동 변환됨

double result = 1.2f + 3.4; // 1.2f는 float 타입, 3.4는 double 타입

-> 1.2f1.2 (double 타입)로 변환되어 연산 수행됨

int intValue = 10;
double doubleValue = 1.2;
double result = intValue + doubleValue;

-> int 타입의 intValuedouble 타입으로 변환되어 연산을 수행해서 result11.2의 값이 저장된다.

int intValue = 10;
double doubleValue = 1.2;
int result = intValue + (int) doubleValue;

-> 꼭 int 타입으로 연산해야할 때, double 타입에 (int)를 사용하여 int 타입으로 강제 변환(Casting)하여 연산 수행


6. 정수 타입의 연산 결과에서 실수값이 나왔을 때

int x = 1;
int y = 2;
double result = (double)x / y;
System.out.println(result);

-> 원래 수학적으로는 1 / 2 = 0.5인데, 변수 xyint 타입으로 선언되어 있기 때문에 0으로 출력된다.
0.5로 출력하려면 실수형으로 형변환을 해주어야 하는데, double result = (double) x / y;를 입력하여 double 타입으로 형변환 해주어 0.5를 출력할 수 있다.


7. 문자열 결합 연산

: + 연산자를 사용할 때 피연산자가 모두 숫자일 경우는 덧셈을 실행하지만 피연산자 중 하나가 문자열일 경우 나머지 피연산자도 자동으로 문자열로 변환됨

int value 1 + 2;
int value = 3;
// 숫자 + 숫자 = 숫자

String str = 1 + "2";
String str = "12";
//숫자 + 문자열 = 문자열

TIP : 우선 연산하고 싶은 부분이 있는 경우 ( ) 괄호로 감싸주면 된다.


8. 문자열 -> 기본 타입 강제 형변환

  • String -> byte
String str = "1";
byte value = Byte.parseByte(str);
  • String -> short
String str = "10';
short value = Short.parseShort(str);
  • String -> int
String str = "10";
int value = Integer.parseInt(str);
  • String -> long
String str = "100000";
long value = Long.parseLong(str);
  • String -> float
String str = "12.345";
float value = Float.parseFloat(str);
  • String -> double
String str = "12.345";
double value = Double.parseDouble(str);
  • String -> boolean
String str = "true";
boolean value = Boolean.parseBoolean(str);

9. 기본 타입 -> 문자열 강제 형변환

String str = String.valueOf(기본 타입 값);

위의 메소드에 기본 타입 값을 입력해 주면 문자열로 형변환 됨

profile
공부 기록

0개의 댓글