5. 형변환(casting)

오현석·2022년 2월 27일

프로그램을 작성하다 보면 서로 다른 타입간의 연사을 수행해야 하는 경우가 있는데 이럴때 연산을 수행하기 전에 타입을 일치시켜야 한다.

변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것을 형변환(casting)이라고 한다.

float num = 3.14f;
					
int  num2 = (int)num;
	    //  변환하고자하는 타입코드를 입력하세요

형변화를 하는 방법은 변환하고자 하는 변수나 리터럴 앞에 변환시키고 싶은 타입을 괄호에 넣어 붙여주면 된다.
위 예시를 보면 float타입 num을 선언한후 리터럴을 저장한후 int 타입 num2에 num을 인트형으로 변환 시켜 저장하였다.


이러한 형변환은 간단하지만 몇가지 주의사항이 있다.

  1. 큰 타입에서 작은 타입으로 변환시 값 손실(loss of data)가 발생할 수 있다.
  2. 작은 타입에서 큰 타입 변환시 값 손실은 발생하지 않는다.
  3. 편의상 형변환을 생략할 수 있다. (이때 컴파일러가 생략된 형변환를 자동으로 추가)
package study;

public class study {

	public static void main(String [] args) {
		
	    //ex 1, 2	
	
		int a = 300;
		byte b = (byte)a;
		
		byte c =  30;
		int d = (int)c;
		
		System.out.println("b = " + b); // byte형으로 변환된 int a값
		System.out.println("d = " + d); // int형으로 변환된 byte c값
	
	}
}
	}
}



b = 44
d = 30


int형은 byte형보다 큰타입이기 때문에 300이 저장된 a를 byte로 바꿀씨 값 손실이 발생하여 44가 출력되는 것을 알 수 있다.

package study;

public class study {

	public static void main(String [] args) {
		
	   //ex3
		
		float f = 1234f;
	//= float f = (float)1234f;
		
		byte b = 1000; // 에러발생
		
		byte c = (byte)1000;

	
	}
}

float타입 f는 정수 1234를 저장하지만, float타입 역시 1234를 저장하는데 아무런 문제가 발생하지 않기 때문에 컴파일러가 자동으로 형변환를 시킨다.

byte형 b의 경우 자신의 범위보다 큰 값을 저장했기 때문에 에러가 발생한다. 하지만 byte타입 c의 경우는 의도적으로 형변환를 붙여놨기 때문에 에러는 발생하지 않지만 값손실이 발생한다.

profile
지망생

0개의 댓글