2-5. 형 변환

codinghoon·2021년 6월 14일
0

java-basic

목록 보기
8/13
post-thumbnail

✅ 형 변환 (Type Conversion)

▶ 특정 자료형을 변환하는 과정을 의미한다.

자료 출처: Do it! 자바프로그래밍 입문 (이지스퍼블리싱)

▶ 화살표 방향으로 형 변환을 하는 경우,
자동으로 자료형이 변환되는 '묵시적 형 변환 (Implicit Conversion)'이 일어난다.

▶ 화살표 반대방향으로 형 변환을 하는 경우,
강제로 자료형을 변환하는 '명시적 형 변환 (ExplicitConversion)'이 일어난다.

실수가 정수보다 표현 범위가 크고 정밀하기 때문에, long형이 8바이트 자료형임에도 불구하고 4바이트 자료형인 float형보다 단계가 낮다.


✅ 묵시적 형 변환이 일어나는 경우

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

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

(3) 연산 중에 자동으로 변환되는 경우

package type_conversion;

public class ImplicitConversion {
    public static void main(String[] args) {
        // 바이트 크기가 작은 자료형에서, 큰 자료형으로 대입하는 경우
        byte bNum1 = 10;
        short sNum1 = bNum1;
        System.out.println(bNum1);
        System.out.println(sNum1);

        // 덜 정밀한 자료형에서, 더 정밀한 자료형으로 대입하는 경우
        int iNum1 = 12345;
        float fNum1 = iNum1;
        System.out.println(iNum1);
        System.out.println(fNum1);

        // 연산 중에 자동으로 변환되는 경우
        int iNum2 = 10;
        float fNum2 = 20.0F;
        double dNum = iNum2 + fNum2;
        System.out.println(dNum);
    }
}

[실행 결과]
10
10
12345
12345.0
30.0

▶ 세 번째 경우에서, 두 번의 묵시적 형 변환이 발생한다.

(1) iNum2 + fNum2 연산에서 int형이 float형으로 형 변환
(2) float형이 된 (iNum2와 fNum2의) 합이 double형으로 형 변환


명시적 형 변환이 일어나는 경우

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

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

package type_conversion;

public class ExplicitConversion {
    public static void main(String[] args) {
        // 바이트 크기가 큰 자료형에서, 작은 자료형으로 대입하는 경우
        int iNum = 200;
        short sNum = (short)iNum;
        byte bNum = (byte)iNum;

        System.out.println(iNum);
        System.out.println(sNum);
        System.out.println(bNum);  /* 자료 손상 */

        // 더 정밀한 자료형에서, 덜 정밀한 자료형으로 대입하는 경우
        double dNum = 3.141592;
        int iNum2 = (int)dNum;

        System.out.println(dNum);
        System.out.println(iNum2);  /* 자료 손상 */
    }
}

[실행 결과]
200
200
-56
3.141592
3

▶ 프로그래머가 반환할 자료형을 명시적으로 작성해야 한다.

▶ 명시적 형 변환은 자료 손상이 발생할 수 있으므로 주의해야 한다!

0개의 댓글