Java - Casting(형변환) [IT 국비지원/구디 아카데미/김지훈 강사님]

hooon__dii·2023년 8월 16일
0

Java

목록 보기
5/11
post-thumbnail

형변환(Type Casting)

말 그대로 타입을 변환하는것, 즉 변수나 *리터럴의 타입을 변환하는것이다.
자바는 타입이 다른 값들은 같은 타입으로 변환한 다음 계산하여야 하므로 주로 타입이 다른 값들을 계산하는 경우 사용된다.

  * 리터럴(Literal) : 데이터(값) 그 자체를 뜻함. 객체지향 언어에서는 객체의 리터럴 표기법을 지원한다.
      (리터럴 표기법 : 변수를 선언함과 동시에 그 값을 지정해주는 표기법 / ex ) int num = 1;)
  • 8가지 기본형 타입에서 boolean을 제외한 나머지 타입은 서로 형변환이 가능하다.
  • 형변환에는 묵시적 형변환명시적 형변환이 있다.

묵시적 형변환(Implict Type Conversion)

컴파일러에 의해 자동으로 형변환이 이루어지는 것을 말한다.

묵시적 형변환은 위 그림처럼 표현범위가 좁은 데이터 타입에서 -> 넓은 데이터 타입으로의 변환만 허용 한다.

  • char와 short는 둘다 16bit지만 서로 범위가 달라서 어느쪽으로 형변환 하더라도 손실이 발생 할 수 있으므로 자동 형변환 되지 않는다.
  • char -> int로 형변환시에는 문자를 아스키코드로 자동으로 변환해준다.
  • long타입은 float보다 크키는 크지만 float타입은 실수까지 표현 할 수 있기 때문에 표현범위가 더 넓다.
    하지만 float타입은 long 타입보다 크기가 작기 때문에 데이터 손실이 발생할 수도있다.

명시적 형변환(Explicit Type Conversion)

사용자가 직접 데이터의 타입을 변경하는것, 강제 형변환이라고도 한다.

	// 사용자가 타입 캐스트 연산자 "(type)"를 사용 하여 형변환을 해준다.
    int num = 10;
    byte value = (byte)num;	
  • 표현범위가 넓은 데이터 타입에서 좁은 데이터 타입으로의 변환이 허용되지만 데이터의 손실이 발생 할 수 있다.
    크기나 표현 범위가 넓은 쪽에서 좁은쪽으로 들어가는것이기 때문이다.
  • 크기를 넘어서면 데이터 손실이 발생하게되는데 이것을 오버플로우(Overflow)현상이라고 한다.

자바에서는 데이터 손실을 방지하기 위해 기본타입에 대해 최대값과 최소값을 상수로 제공하고 있다. (boolean , char 타입 제외 )

// float // 출력 : 1.4E-45~3.4028235E38
System.out.println(Float.MIN_VALUE+"~"+Float.MAX_VALUE);

// double // 출력 : 4.9E-324~1.7976931348623157E308
System.out.println(Double.MIN_VALUE+"~"+Double.MAX_VALUE);

// byte의 범위 // 출력 : -128~127
System.out.println(Byte.MIN_VALUE+"~"+Byte.MAX_VALUE);

// short // 출력 : -32768~32767
System.out.println(Short.MIN_VALUE+"~"+Short.MAX_VALUE);

// int // 출력 : -2147483648~2147483647
System.out.println(Integer.MIN_VALUE+"~"+Integer.MAX_VALUE);

// long // 출력 : -9223372036854775808~9223372036854775807
System.out.println(Long.MIN_VALUE+"~"+Long.MAX_VALUE);

다음을 이용하여 변환전 검사를 수행하여 오버플로우현상을 방지 할수있다.

int n = 128;
if(n < Byte.MIN_VALUE || n > Byte.MAX_VALUE ){	// byte : -128~127
	Syetem.out.println("Byte타입 변환 불가");
}else{
	byte b = (byte)n;
}





형변환시 데이터 손실에 신경을 많이 써야겠다......
it국비지원 / 구디아카데미 / 김지훈 강사님

0개의 댓글