5. 형변환(casting)

오현석·2022년 2월 27일
0

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

변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것을 형변환(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개의 댓글