본문 바로가기
programming/Java

자바 데이터 타입 캐스팅 종류 사용 java data type casting

by 개코 - 개발과 코딩 2022. 2. 26.

자바에서 캐스팅은 중요하다. 변수는 메모리를 차지하고 크기는 한정되어 있다. 데이터 조작시 데이터 타입은 동일한 것이 좋겠지만, 간혹 큰 범위의 값을 작은 범위의 값으로 변환해야 할 때도 생긴다. 이런 경우 문제가 발생할 수 있기 때문에 캐스팅이 필요하다. 작은 범위의 값을 큰 범위의 값으로 변화하는 것을 widening casting 이라고 하고 , 큰 범위의 값을 작은 범위의 값을 변환하는 것을 narrowing casting 이라 한다.

자바 데이터 타입 캐스팅
java data type casting

자바의 타입 캐스팅은 자료형을 변경하는 것을 말한다.

자료형은 데이터 타입을 말하며, 이전 포스팅에서 다루었던 것을 참고하자.

데이터 타입은 모든 프로그래밍 언어가 가지고 있는 데이터 형태를 말한다.

숫자형 문자형 등을 말하고 이들이 가지고 있는 메모리의 크기가 다르다.

그렇기에 데이터 타입을 변경하는 타입 캐스팅을 통해 데이터를 조작해야 할 때가 있다.

데이터 타입의 범위는 그릇이라 생각하면 이해하기 쉽다.

타입 캐스팅 종류

자바에서 말하는 타입 캐스팅에는 2가지 종류가 있다.

작은 메모리 범위의 데이터 타입을 큰 범위의 데이터 타입으로 변형하는 것이 있고
큰 메모리 범위의 데이터 타입을 작은 범위의 데이터 타입으로 변형하는 것이 있다.

이들을 가리켜 와이든 캐스팅 ( Widening Casing ) 네로잉 캐스팅 ( Narrowing Cating ) 이라고 한다.

  • Widening Casting / 암묵적 캐스팅
    - 작은 범위의 데이터를 큰 범위의 데이터로 캐스팅
  • Narrowing Casing / 명시적 캐스팅
    - 큰 범위의 데이터를 작은 범위의 데이터로 캐스팅

데이터의 범위

자료형인 데이터 타입의 구체적인 데이터 범위는 몰라도 되겠지만
자료형의 크기 순서 정도는 알 필요가 있다.

  • 자료형 크기 오름차순
    byte < short < char < int < long < float < double

각 타이터 타입들이 메모리를 차지하는 데이터 크기는 byte 가 가장 작고 double 이 가장 크다.

샘플코드

작은 데이터 타입이 큰 데이터 타입으로 변환되는 것은 암시적으로 캐스팅된다.

작은 범위의 데이터가 큰 데이터 타입으로 바뀌는 것은 작은 그릇의 물이 큰 그릇으로 옮기는 것과 같다.

큰 데이터 타입이 작은 데이터 타입으로 변환되는 것은 명시적으로 캐스팅된다.

큰 범위의 데이터가 작은 데이터 타입으로 바귀는 것은 큰 그릇의 물이 작은 그릇으로 옮기는 것과 같다.

당연히 없어지는 부분들이 생기고 데이터 범위는 꽉 찬다.

코드를 보자.

public class JavaTutorials {
	  
	public static void main(String[] args) {
		
		System.out.println("--------------------------------------------------");
		
		// Widening Casting : int to double : 암시적 변환
		byte vByte = 9;
	    double vDouble = vByte;

	    System.out.println(String.format("데이터타입 %s, 변수값 %s.", ((Object)vByte).getClass().getName(), vByte));
	    System.out.println(String.format("데이터타입 %s, 변수값 %s.", ((Object)vDouble).getClass().getName(), vDouble));
	    
		System.out.println("--------------------------------------------------");
	    
	    // Narrowing Casting : double to int : 명시적 변환
	    double vDouble2 = 9.99d;
	    byte vByte2 = (byte)vDouble2; 	    

 	    System.out.println(String.format("데이터타입 %s, 변수값 %s.", ((Object)vDouble2).getClass().getName(), vDouble2));
 	    System.out.println(String.format("데이터타입 %s, 변수값 %s.", ((Object)vByte2).getClass().getName(), vByte2));
		
		System.out.println("--------------------------------------------------");
	}
}

위의 코드에서 캐스팅되는 부분만 보도록 하자.

암시적 변환은 그저 변수에서 변수로 할당해 주면 그만이다.

작은 곳에서 큰 곳으로 옮기기 때문이다. 여유가 있다.

하지만 명시적 변환은 변수에 캐스팅을 위한 자료형을 적어 주어야 한다.

큰 곳에서 작은 곳으로 옮기는 것은 무리가 있기 때문이다.

결과를 보자.

당연히 데이터가 잘려지는 것을 볼 수 있다.

반응형

댓글