형변환 연산자와 자동 형변환

형변환 연산자

형변환이란?

  • 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 의미합니다.

  • (타입)피연산자

변환
수식
결과

int -> char

(char)65

'A'

char -> int

(int)'A'

65

float -> int

(int)1.6f

1

int -> float

(float)10

10.0f

  • 아래 예제코드로 학습해 보겠습니다.

class Operator3_1 {
    public static void main(String[] args) {
        int i = 65, num = 10;
        char ch = 'A';
        float f = 1.6f;

        System.out.println("(char)i = " + (char)i);
        System.out.println("(int)ch = " + (int)ch);
        System.out.println("(int)f = " + (int)f);
        System.out.println("(float)num = " + (float)num);
    }
}

자동 형변환

float f = 1234; => int 타입의 값을 float타입의 변수에 저장!

  • 상대적으로 int 타입이 float 타입 보다 크기가 작기 때문에 가능합니다.

float f = (float)1234; => 사실 변수와 리터럴의 타입을 일치 시켜줘야 합니다.

  • 우리가 보는 코드에는 형변환이 생략되어 있었습니다. 즉, 컴파일러에 의해 자동으로 형변환된 겁니다.

int i = 3.14f;

  • 이렇게 큰 타입을 작은 타입에 저장할 때 Error 가 발생합니다.

  • 3.14f 가 int 타입으로 변환될 때 소수점이 사라지면서 원래 값이 달라집니다.

  • 즉, 값 손실이 발생하는데 이런 경우, 컴파일러가 자동으로 형변환을 안 해줍니다.

int i = (int)3.14f; => 이렇게 직접 수동으로 형변환을 시켜줘야 합니다.

"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."

  • 형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략 하려면 컴파일러가 알아서 자동으로 형변환을 해야합니다.

  • 따라서 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없음으로 두 타입 중에서 표현 범위가 더 넓은 쪽으로 형변환됩니다.

  • 아래 예제코드로 학습해 보겠습니다.

Ref. Java의 정석 기초편 Chapter3(7, 8)

Ref. 형변환

Last updated