[Java] 타입 변환

kiteB·2021년 12월 16일
0

Java

목록 보기
2/35
post-thumbnail

[ 타입 변환 ]

타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.

예) byteint

타입 변환에는 두 가지 종류가 있다.
1. 자동 (묵시적) 타입 변환
2. 강제 (명시적) 타입 변환


1. 자동 타입 변환

자동 타입 변환(Promotion)은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.

  • 자동 타입 변환은 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생한다.

  • 큰 크기 타입과 작은 크기 타입의 구분은 사용하는 메모리 크기이다.

📌 크기별로 타입 정리

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

  • floatint, long보다 큰 타입으로 표시한 이유는 표현할 수 있는 범위가 float가 더 때문이다!
  • 자동 타입 변환이 발생되면 변환 이전의 값과 변환 이후의 값은 동일하다. 즉, 변환 이전의 값은 변환 이후에도 손실 없이 그대로 보존된다.

예제: 자동 타입 변환이 생기는 코드

public class PromotionExample {

    byte byteValue = 10;
    int intValue = byteValue;	// int <- byte
    System.out.println(intValue);
    
    char charValue = '가';
    intValue = charValue;		// int <- char
    System.out.println("가의 유니코드 = " + intValue);
    
    intValue = 500;
    long longValue = intValue;	// long <- int
    System.out.println(longValue);
		
    intValue = 200;
    double doubleValue = intValue;	// double <- int
    System.out.println(doubleValue);
}

실행 결과

10
가의 유니코드 = 44032
500
200.0

2. 강제 타입 변환

강제 타입 변환(Casting)은 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것을 말한다.

  • 강제 타입 변환은 캐스팅 연산자 ()을 사용하는데, 괄호 안에 들어가는 타입은 쪼개는 단위이다.
  • 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환을 할 수 없다.

예제: 강제 타입 변환

public class CastingExample {

    int intValue = 44032;
    char charValue = (char) intValue;
    System.out.println(charValue);
    
    long longValue = 500;
    intValue = (int) longValue;
    System.out.println(intValue);
    
    double doubleValue = 3.14;
    intValue = (int) doubleValue;
    System.out.println(intValue);
}

실행 결과

500
3

3. 연산식에서의 자동 타입 변환

연산은 기본적으로 같은 타입의 피연산자(operand) 간에만 수행되기 때문에
서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동
변환된 후 연산을 수행
한다.

예) int 타입 피연산자와 double 타입 피연산자를 덧셈 연산하면

  • 먼저 int 타입 피연산자가 double 타입으로 자동 변환된다.
  • 그 후 연산을 수행한다. 당연히 연산의 결과는 double이 된다!

만약 꼭 int 타입으로 연산을 하고 싶다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산을 수행하면 된다.

예제: 연산식에서 자동 타입 변환

public class OperationsPromotionExample {
    
    byte byteValue1 = 10;
    byte byteValue2 = 20;
    
    int intValue1 = byteValue1 + byteValue2;
    System.out.println(intValue1);
    
    char charValue1 = 'A';
    char charValue2 = 1;
	
    int intValue2 = charValue1 + charValue2;
    System.out.println("유니코드 = " + intValue2);
    System.out.println("출력문자 = " + (char)intValue2);
    
    int intValue3 = 10;
    int intValue4 = intValue3/4;
    System.out.println(intValue4);
    
    int intValue5 = 10;
    double doubleValue = intValue5 / 4.0;
    System.out.println(doubleValue);
	    
}

출력 결과

30
유니코드 = 66
출력문자 = B
2
2.5
profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글