달력

12

« 2019/12 »

  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  


 

변환(Type Conversion)

·       초기화 시에만 변환 적용됩니다.

·       하나의 타입을 다른 타입으로 바꾸는 것을 의미합니다.

·       타입 변환이라고도 합니다.

 

 

 

 

변환(Type Conversion) 종류

기본 자료형 값을 다른 자료형으로 변환할 있는 기능을 의미하며 가지 종류가 있습니다.

boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 있습니다.

·       프로모션(promotion)

·       디모션(demotion)

 

 

 

 

 

프로모션(promotion)

·       자료형으로 변환

·       작은 자료형 -> 자료형

·       대입 연산자에서 왼쪽의 자료형이 오른쪽 결과의 자료형보다 발생합니다.

·       정보의 손실 없음

·       내부적으로 자동으로 형변환을 수행합니다.(자동 형변환; 묵시적 형변환; Implicit Type Conversion)

short s=7;

float f = s + 3.14f;

 

 

 

산술연산식에서 자동 형변환

산술연산식

연산 결과

정수 산술연산자 문자

정수

정수 산술연산자 정수

정수

정수 산술연산자 실수

실수

실수 산술연산자 정수

실수

실수 산술연산자 실수

실수

 

 

 

 

 

 

 

디모션(demotion)

·       작은 자료형으로 변환

·       자료형 -> 작은 자료형

·       경우에 따라 정보의 손실 발생

·       사용자가 형변환을 직접 지정합니다.(명시적 형변환; Explicit Type Conversion)

int i = 0;

short s=10;

i = (int)(10 + 3.5f);

 

 

 

명시적 형변환

·       자동 변환 발생지점을 표시하기 위해서 사용(의도한 변환임을 표시)

·       자동 변환의 규칙에 위배되지만 변환 필요한 상황에 사용(디모션)

·       중괄호 사용하여 표현하며 괄호를 타입 캐스트(type cast) 연산자라고 합니다.

 

(자료형)

(자료형)수식

 

 


Posted by codedragon codedragon

댓글을 달아 주세요

   

   

자바의 자동 형변환 규칙(Implict Conversion)

값의 표현 범위로 자동 형변환됩니다.


   

 

double num = 3.14f + 10;

//10 10F 자동 형변환

 


Posted by codedragon codedragon

댓글을 달아 주세요

자동형 변환-프로모션/디모션

   

   

소스코드

  1.  public class CastEx03 {
  2.         public static void main(String[] args){
  3.                  
  4.                  
  5.                 System.out.println("");
  6.                 System.out.println("=========프로모션=========");
  7.                 /*프로모션:
  8.                 자료형으로 승격이 일어나는 형태
  9.                 정보의 손실이 전혀 없으며 자동적으로 발생*/
  10.                 byte b1 = 127;
  11.                 byte b2 = 127;
  12. //              byte b3 = b1 + b2;      //Error: cannot convert from int to byte
  13.                 int i1 = b1 + b2;      
  14.                 /*32bit(4byte)미만 byte 데이터 연산시 32bit int형으로 승격됩니다. 데이터 타입이 다르므로 , int형은 byte형으로 저장되지 않습니다.
  15.                 Error: cannot convert from int to byte*/
  16.                 System.out.println("i1= " + i1 );
  17.                 System.out.println("b1 + b2 = " + (b1+b2) );    // 자동적으로 int 형변환 됩니다.
  18.                  
  19.                 System.out.println("");
  20.                 short s1 = 12345;
  21.                 short s2 = 12345;
  22.                 int i2 = s1 + s2;
  23. //              32bit(4바이트)미만 shore 데이터 연산시 32bit int형으로 승격
  24.                 System.out.println("i2= " + i2 );
  25.                 System.out.println("s1 + s2 = " + (s1+s2) );    // 자동적으로 int 형변환 됩니다.
  26.                  
  27.                 System.out.println("");
  28.                 int int1 = 12345;
  29.                 long lg1 = 1234567L;
  30. //              long            = int           long
  31.                 long resultL = int1 +   lg1;    // int -> long 자동적으로 형변환
  32.                 System.out.println("resultL = " + resultL);
  33.                  
  34.                 System.out.println("");
  35.                 int int2 = 12345;
  36.                 double d1 = 100.3D;
  37.                 double resultD= int2 + d1;      // int -> double 자동적으로 형변환
  38.                 System.out.println("resultD = " + resultD);
  39.                  
  40.                  
  41.                 System.out.println("");System.out.println("");
  42.                 System.out.println("=========디모션=========");
  43.                 /*디모션:
  44.                 작은 자료형으로 강등
  45.                 자료의 손실이 있을 있음
  46.                 명시적으로 형변환해야 */
  47.                 byte b4 = 125;
  48.                 byte b5 = 125;
  49.                 byte result_byte = (byte)(b4 + b5);    
  50.                 //연산결과로 int 자동으로 형변환 되므로 byte 자료형을 유지하기 위해 int -> byte 강제 형변환
  51. //              (byte): 캐스트 연산자를 사용하여 강제 형변환
  52.                 System.out.println("result_byte = " + result_byte);
  53.                 System.out.println("b4 + b5 = " + (b4 +b5) );
  54.                  
  55.                 System.out.println("");
  56.                 short s4 = 1234;
  57.                 short s5 = 1234;
  58.                 short result_short = (short)(s4 + s5);
  59.                 System.out.println("s4 + s5 = " + (s4 +s5) );
  60.                 System.out.println("result_short = " + result_short);
  61.                  
  62.                 System.out.println("");
  63.                 int int3 = 1234;
  64.                 float f1 = 100.5F;
  65. //              int result_int1 = int3 + f1;
  66.                 int result_int2 = int3 + (int)f1;       //float ->int 강제 형변환 (절삭됨)
  67.                 System.out.println("int3 + f1 = " + (int3 + f1) );
  68.                 System.out.println("result_int2 = " + result_int2);
  69.                  
  70.                 System.out.println("");
  71.                 int int4 = 1234;
  72.                 long lg2 = 1234L;
  73.                 int result_int3 = int4 + (int)lg2;      //long -> int 강제 형변환
  74.                 System.out.println("int4 + lg2 = " + (int2 +lg2) );
  75.                 System.out.println("result_int3 = " + result_int3);
  76.                  
  77.                  
  78.                  
  79.         }
  80.    
  81. }


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

자료형 변환-표현방법의 변환을 의미

   

소스코드

  1.  public class CastEx02 {
  2.    
  3.         public static void main(String[] args)
  4.         {
  5.                 short num1=10;
  6.                 short num2=20;
  7.                 short result=(short)(num1 + num2);
  8.                 //short to int -> 연산 -> int to short (내부적으로 자동으로 일어남)
  9.                  
  10.                 System.out.println(result);
  11.         }


   

   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

자동형 변환을 통해 문자의 유니코드 값 출력

   

   

소스코드

  1.  public class CastEx01 {
  2.    
  3.         public static void main(String[] args)
  4.         {
  5.                 char ch1='A';
  6.                 char ch2='Z';
  7.                          
  8.                 int num1=ch1;
  9.                 int num2=(int)ch2;
  10.    
  11.                 System.out.println("문자 A 유니코드 : "+num1);
  12.                 System.out.println("문자 Z 유니코드 : "+num2);     
  13.         }
  14. }


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요