형변환

치로·2024년 7월 17일

형변환(Casting)

1. 형변화

  • 변수의 자료형이 변환되는 것을 의미
  • 특정 자료형의 값을 다른 자료형의 변수에 대입할 수 있음
  • 암묵적 형변환과 명시적 형변환의 두 종류가 있음

2. 암묵적 형변환(upcasting)

  • 서로 다른 자료형을 연산 혹은 대입하는 경우, java 컴파일러가 자료형을 통일, 이 과정에서 발생하는 형변환을 암묵적 형변환이라고 함
    int a = 100; // 정수형
    float b = a; // 정수형을 실수형에 대입

  • 암묵적 형변환은 어떤 변수가 더 큰 범위의 변수로 대입 가능함을 의미함
    /// 정수 -> 실수 = 암묵적 형변환(데이터 손실 없음)
    /// 실수 -> 정수 = 명시적 형변환(데이터 손실 유)

  • 암묵적 형변환이 허용되는 범위 : 암묵적 형변환은 데이터의 손실이 발생하지 않는 범위 내에서만 이루어짐

  • ex) double형 데이터를 20.5를 int에 대입하는 경우에는 0.5에 대한 데이터 손실이 불가피하므로 -> 에러 발생
    /// int에서 바로 double로 가도 됨

3. 명시적 형변환

  • 데이터의 손실을 감수하더라도, 강제로 형변환 시키는 형태
    자료형 b = (변환할 자료형)a;
  • 실수형을 정수형으로 변환하는 경우, 소수점 이하 자리는 버려짐
    double a = 3.14d;
    int b = (int)a; // 결과는 3

연습 코드

package casting;

public class Main01 {

	public static void main(String[] args) {
		short s = 100;
		int i = s;
		long l = i;
		float f = l;
		double d = f;
		System.out.println("s = " + s);
		System.out.println("i = " + i);
		System.out.println("l = " + l);
		System.out.println("f = " + f);
		System.out.println("d = " + d);
		System.out.println("------------------");
		
		int myage1 = 20;
		double myage2 = myage1;
		System.out.println("myage1 : " + myage1);
		System.out.println("myage2 : " + myage2);
		System.out.println("------------------");
		
		char c1 = 'a'; //97
		int num1 = c1;
		System.out.println("num1 = " + num1);
	}

}
package casting;

public class Main02 {

	public static void main(String[] args) {
		long l = 100L;
		int i = (int)l;
		short s = (short)i;
		
		System.out.println("l : " + l);
		System.out.println("i : " + i);
		System.out.println("s : " + s);
		System.out.println("------------------");
		
		double pi1 = 3.14D;
		
		// 큰 범위의 변수를 작은 범위의 변수에 대입하는 것은 에러
		// int pi2 = pi1;
		
		// 명시적 형변환이 필요
		int pi2 = (int)pi1;
		
		System.out.println("pi1 : " + pi1);
		System.out.println("pi2 : " + pi2);
	}

}
package casting;

public class Main03 {

	public static void main(String[] args) {
		double a = 10.5D;
		float b = 20.5F;
		
		/*
		 * 큰 범위의 변수와 작은 범위의 변수가 연산을 수행하면,
		 * 작은 범위의 변수가 큰 범위의 데이터형으로 암묵적 형변환을 수행
		 * 그러므로 아래의 a+b는 double형의 변수가 되므로
		 * float형의 값에 대입하는 것은 에러
		 */
		
		// float f = a + b;
		float f = (float)(a+b);
		System.out.println(f);
		
		double d = a + b;
		System.out.println(d);
		
	}

}

0개의 댓글