본문 바로가기
Language/JAVA

[JAVA] 데이터 타입 변환 // 자동타입변환 강제타입변환 연산식타입변환

by 아이엠제니 2021. 9. 11.

 


 

 

타입 변환

  • 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말함
    예) byte 타입을 int 타입으로 변환 또는 int 타입을 byte으로 변환
  • 자동(묵시적) 타입 변환, 강제(명시적) 타입 변환 두 종류가 있음

 

 


자동 타입 변환

  • 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
  • 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생
큰 크기 타입 = 작은 크기 타입
자동 타입 변환
  • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
  • 정수 타입이 실수 타입으로 변환하는 것은 무조건 자동 타입 변환이 된다

 

int intValue = 200;
double doubleValue = intValue; //200.0

> 실수 타입으로 변환된 이후의 값은 정수값이 아닌, .0이 붙은 실수값이 된다

 

char charValue = 'A';
int intValue = charValue; //65가 저장

> char 타입의 경우 int 타입으로 자동 변환되며 유니코드 값이 int 타입에 저장됨

 

package thisisjava.chap02.num03;

public class PromotionExample {
    public static void main(String[] args) {
        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);
    }
}

 

 

 


강제 타입 변환 (Casting)

  • 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환 할 수 없음
    예) 4byte인 int 타입을 1byte인 byte 타입에 담을 수 없다
  • 캐스팅 연산자 () 를 사용하는데, 괄호 안에 들어가는 타입은 쪼개는 단위
작은 크기 타입 = (작은 크기 타입) 큰 크기 타입
int = (int) long
강제 타입 변환

 

double doubleValue = 3.14;
int intValue = (int) doubleValue; // 정수 부분인 3만 저장됨

> 실수 타입(float, double)은 정수 타입(byte, short, int, long)으로 자동 변환되지 않음

> 소수점 이하 부분은 버려지고, 정수 부분만 저장

 

package thisisjava.chap02.num03;

public class CastingExample {
    public static void main(String[] args) {
        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);
    }
}

 

package thisisjava.chap03;

public class CheckValueBeforeCasting {
    public static void main(String[] args) {
        int i = 128;

        if ((i < Byte.MIN_VALUE) || (i > Byte.MAX_VALUE)) { //*
            System.out.println("byte 타입으로 변환할 수 없습니다");
            System.out.println("값을 다시 확인해 주세요");
        } else {
            byte b = (byte) i;
            System.out.println(b);
        }
    }
}

> 변환으로 인한 데이터 손실이 발생되지 않도록 함

> (i<-128) || (i>127)과 동일

> i = 128 // 128 > 127

 

package thisisjava.chap02.num03;

public class FromIntToFloat {
    public static void main(String[] args) {
        int num1 = 123456780;
        int num2 = 123456780;

        float num3 = num2;
        num2 = (int) num3;

        int result = num1 - num2;
        System.out.println(result);
    }
}

> 정수 타입을 실수 타입으로 변환할 때 정밀도 손실을 피한다

> float ㄴㄴ

 

package thisisjava.chap02.num03;

public class FromIntToDouble {

    public static void main(String[] args) {
        int num1 = 123456780;
        int num2 = 123456780;

        double num3 = num2;
        num2 = (int) num3;

        int result = num1 - num2;
        System.out.println(result);
    }
}

> double 정밀도 ㅇㅋ

 

 


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

  • 연산은 기본적으로 같은 타입의 피연산자간에만 수행됨
    서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산 수행
  • 자바는 정수 연산일 경우 int 타입을 기본으로 함
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // result에 15.5가 저장

> intValue가 double값으로 변환

 

int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int)doubleValue; // result에 15 저장

> int 타입으로 꼭 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산 수행!

 

package thisisjava.chap02.num03;

public class OperationsPromotionExample {
    public static void main(String[] args) {
        byte byteValue1 = 10;
        byte byteValue2 = 20;
//        byte byteValue3 = byteValue1 + byteValue2; //컴파일 에러
        int intValue1 = byteValue1 + byteValue2;
        System.out.println(intValue1);

        char charValue1 = 'A';
        char charValue2 = 1;
//        char charValue3 = charValue1 + charValue2; //컴파일 에러
        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;
//        int intValue6 = 10/4.0; //컴파일에러
        double doubleValue = intValue5 / 4.0;
        System.out.println(doubleValue);
    }
}

> 연산식에서 자동 타입 변환

 

 

 

'이것이 자바다' 공부 기록
300x250