[Java] 변수의 자동타입 변환과 강제타입 변화

    [타입 변환]

    타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다. 타입변환은 크게 자동 타입 변환(promotion)과 강제타입 변환(casting)이 있다. 

     

    [자동타입 변환(Promotion)과 강제타입 변환(Casting)]

    자동타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생한다.

    정수형 끼리 자동 타입 변환은 허용범위가 큰 타입으로 저장하면 되지만 음수 범위가 없는 char 타입으로 자동 변환이 안된다. 정수형은 무조건 실수형으로 자동 타입 변환이 된다.

     

    자동타입 변환과는 반대로 큰 허용 범위 타입에서 작은 허용 범위 타입으로 변하게 할때는 앞에 괄호안에 작은 허용 범위 타입을 써줘야 한다. 실수형을 정수형 타입에 넣을 때도 앞에 타입을 써줘야 하고 소수점은 버려진다.

    double doubleValue = 3.14;
    int intValue = (int)doubleValue;

     

     

    [연산식 자동 타입 변환]

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

     

    그래서 아래 예제를 보면 x, y 는 타입이 byte인데 x+y는 int 타입에 저장하라고 한다. 

     

    반대로 아래처럼 10 + 20은 바로 byte 타입에 담을 수 있는데, 컴파일 단계에서 미리 10 + 20 을 연산을 했기 때문이다.

    byte result1 = 10 + 20;

     

     

    만약에 int 랑 long 타입 을 산술 연산을 하면  long 타입에 넣어야 한다. 또 실수타입과 저장을 하면 실수타입에 저장을 해야 한다. 

     

    실수 리터럴은 무조건 double로 인식 한다. 그래서 float타입에 저장하려고 하면 에러가 난다.

     

     

    정수형끼리 나눗셈을 하고 실수형 타입에 저장하면 소수점은 버려진다. 왜냐하면 먼저 연산이 되고 나서 그 값을 실수형 타입에 저장하기 때문이다. 소수점이 나오게 하려면 한쪽을 실수형으로 바꿔서 연산을 해야한다.

    int intValue1 = 1;
    int intValue2 = 2;
    
    double doubleValue1 = intValue1/intValue2;
    System.out.println(doubleValue1); //0.0
    
    double doubleValue2 = (double)intValue1/intValue2;
    System.out.println(doubleValue2); //0.5

     

     

    [문자열 연산식으로 자동타입 변환]

    연산식에서 문자열로 자동 타입 변환되는 경우가 있다. 그 이유는 피연산자 중 하나가 문자열일 경우에 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산을 수행하기 때문이다.

    처음 나오는 연산자가 문자열이면 뒤에 나오는 피연산자도 모두 문자열로 변하고 처음 나오는 연산자가 정수형이라면 그 뒤에 문자열이 나오기 전까지는 계속 계산을 한다. 만약에 계산을 먼저 하고 싶으면 그 연산자 피연산자를 ()로 묶어주면 된다.

    String str1 = 10 + 2 + "8";
    System.out.println(str1); //128
    
    String str2 = "10" + 2 + 8;
    System.out.println(str2); //1028
    
    String str3 = "10" + (2 + 8);
    System.out.println(str3); //1010

     

     

    [문자열 강제타입 변환]

    자바에서 문자열을 정수형이나 실수형으로 변하게 하는 방법은 그 타입명의 클래스 함수중 parse타입명 을 쓰면된다.

    또 반대로 정수나 실수형 타입을 문자열로 바꾸는 방법은 String.valueOf(기본타입값)을 쓰면된다.

    int value1 = Integer.parseInt("10");
    double value2 = Double.parseDouble("10.5");
    boolean value3 = Boolean.parseBoolean("true");
    
    String str1 = String.valueOf(10);
    String str2 = String.valueOf(3.14);
    String str3 = String.valueOf(true);

     

     

     

    참고 : 혼자 공부하는 자바 / 신용권  https://www.yes24.com/Product/Goods/74269939

    댓글

    Designed by JB FACTORY