[Java]데이터타입의 형 변환

이지현·2021년 11월 4일
1
post-thumbnail

📕1. 형 변환이란?

  • 1-1 형 변환의 특징

    변수끼리 연산을 할 때 각 변수의 자료형이 다를 경우 자료형을 같게 바꾸는 것을 말한다.

    형 변환은 크게 (1) 묵시적 형 변환(자동 형 변환) (2) 명시적 형 변환(강제 형 변환) 로 나누어진다.

  • 1-2 묵시적 형 변환

    💡 묵시적 형 변환 : 연산시 자동적으로 데이터타입 형태가 변환되는 경우
    (1) 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어진다.
    (2) 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환은 자동으로 이루어진다.

  • 1-3 묵시적 형 변환 예시

    (1) 덜 정밀한 자료형에서 더 정밀한 자료형으로 변환하는 경우

    int iNum = 20;
    float fNum = iNum;
    // int와 float 모두 4바이트 이지만 float가 더 정밀하게 데이터를 표현할 수 있다.

    (2) 연산 중에 바이트 크기가 작은 자료형에서 큰자료형으로 자동 변환 되는 경우

    int i = 20;
    float f = i;
    // float > int 큰 형태이므로 int형태의 변수를 float형태의 변수의 대입하면 자동으로 float형태로 형 변환이 된다.
    
    double d;
    d = f + i;
    // double > float > int 큰 형태이므로 float형태의 변수와, int형태의 변수를 더한 값을 double형태의 변수의 대입하게 되면 자동적으로 double형태로 형 변환이 된다.
  • 1-4 명시적 형 변환

    💡 명시적 형 변환 : 연산시 자동적으로 형태가 변환되지 않아 수동으로 변환을 해야되는 경우
    (1) 바이트 크기가 큰 자료형 → 작은 자료형으로 대입하는 경우
    (2) 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우

  • 명시적 형 변환 예시

    (1) 바이트 크기가 큰 자료형 → 작은 자료형으로 대입하는 경우

    int i = 10;
    byte b = (byte)i;
    // int > byte로 큰 형태이므로 큰 형태에서 작은 형태로 변환을 하려면 앞에 변환되는 형태의 타입을 적어줘야한다.

    (2) 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우

    double d = 3.14;
    int i = (int)d;
    double > int로 더 정밀하기 떄문에 더 정밀 → 덜 정밀로 변환하려면 앞에 덜 정밀한 데이터타입을 적어줘야한다.

📌수업 소스

public class ConversionTest {
		// chapter2-2
	public static void main(String[] args) {
		       // 큰 타입으로 자동변환
			byte var_byte1 = 10;
			int var_int1 = var_byte1;
			System.out.println("var_int1 = " + var_int1);
			
			// 명시적 형변환: 큰 타입의 값을 작은 타입의 변수에 할당
			// 명시적으로 형변환해 주지 않으면 컴파일 오류가 발생한다.
			int var_int2 = 100;
			byte var_byte2 = (byte)var_int2;
			
			// char 와 short
			short var_short1 = 200;
			char var_char1 = (char)var_short1;
			System.out.println("var_char1 = " + var_char1);
			
			// int 정수타입보다 작은 정수타입들의 연산: int형으로 변환된다.
			// int 정수타입보다 작은 정수타입의 변수에 값을 할당하려면 
                        //명시적으로 형을 변환시켜야한다.(이유:int형으로 인식하기때문)
			byte var_byte3 = 20;
			byte var_byte4 = 40;
			byte var_result1 = (byte)(var_byte3 + var_byte4); 
			
			char var_char2 = 'A';
			int var_int_result1 = var_char2 + 1;
			System.out.println("var_int_result1 = " + var_int_result1);
			
			// 연산시 피연산자 중 보다 큰 타입으로 형 변환된 후 연산된다.
                        //[즉, int<long 둘이 연산시 큰 타입인 long형으로 변환 후 연산된다.
			int var_int3 = 100;
			long var_long1 = 100;
			long var_long_result1 = var_int3 + var_long1;
			System.out.println("var_long_result = " + var_long_result1);
			
			// 정수와 실수를 연산하면 실수 타입으로 자동 형 변환된다.
                        // 여기서 3.14뒤 f는 float를 뜻하는데 실수기본타입은 double이기 때문에 float타입이라고 지정을 해주는거다.
			long var_long2 = 100;
			float var_float1 = 3.14f; 
			float var_float_result1 = var_long2 + var_float1;
			System.out.println("var_float-result1 = " + var_float_result1);
			
			// float타입과 double타입을 연산하면 double타입으로 변환된다.
			float var_float2 = 3.33f;
			double var_double3 = 4.22;
			double var_long_result2 = var_float2 + var_double3;
			System.out.println("var_long_result2 = " + var_long_result2); 
           
	}/////////main

}/////////class
profile
개발 공부 중인 지현이

0개의 댓글