Java/Java 기본

타입 변환

검정비니 2018. 6. 8. 22:19
728x90
반응형

타입 변환



타입 변환은 물을 큰 그릇과 작은 그릇 사이에서 옮길 때를 생각하면 가장 이해가 쉽다. 예를 들어, 큰 그릇의 물을 작은 그릇으로 옮겨 담는다고 생각해보자. 큰 그릇의 물이 작은 그릇이 담을 수 있는 양보다 많이 담겨 있다면, 작은 그릇으로 옮겨 담을 때 작은 그릇이 담을 수 있는 양보다 많이 담겨 있다면, 작은 그릇으로 옮겨 담을 때 물이 넘쳐서 원래의 양보다 줄어든다. 그러나 큰 긄의 물이 작은 그릇이 담을 수 있는 양보다도 적게 담겨 있다면, 작은 그릇으로 옮겨도 물의 양이 줄지 않고 그대로 보존된다.


반대로 작은 그릇의 물을 큰 그릇으로 옮겨 담는다고 생각해보자. 작은 그릇의 물을 큰 그릇으로 옮겨 담을 때는 작은 그릇에 물이 가득 차든지 차지 않았던지 간에 상관 없이 물의 총량이 줄어들지 않는다.


타입 변환은 한 타입(그릇)의 데이터(물)를 다른 데이터 타입(그릇)으로 변환(옮겨 담는 것)하는 것이다. 타입 변환에는 개발자가 명시적으로 지정하지 않아도 자동적으로 이루어지는 자동 타입 변환과 개발자가 명시를 해야만 이루어지는 강제 타입 변환이 있다.




1. 자동 타입 변환 (= 묵시적 타입 변환 = 암묵적 타입 변환)


작은 그릇의 물을 큰 그릇에 옮겨 담을 때는 원래 물의 양이 보존되는 것과 같이, 작은 데이터 타입에서 큰 데이터 타입으로 타입 변환을 하면 원본 데이터의 손실 없이 그대로 보존되기 때문에 자동 타입 변환이 일어난다.



다음은 자동 타입 변환이 일어나는 관계를 보여 준다. 즉, byte가 가장 작은 그릇이고, double이 가장 큰 그릇으로 생각하면 이해가 쉽다.


byte >> short/char >> int >> long >> float >> double


4바이트인 float 타입이 8바이트인 long 타입보다 뒤에 있는 이유는 정수형 타입과 실수형 타입은 데이터 저장 방식이 다르기 때문이다.




2. 강제 타입 변환 (= 명시적 타입 변환)


큰 그릇의 물을 작은 그릇으로 옮겨 담을 때는 물이 넘쳐서 없어질 수도 있고, 그대로 보존될 수도 있다. 마찬가지로, 큰 데이터 타입에서 작은 데이터 타입으로 타입 변환을 하게 되면 데이터 손실(오버플로우)이 발생할 수도 있으므로, 자동으로 타입 변환이 일어나지 않으며, 개발자가 명시적으로 타입 변환을 지정해야 변환이 이루어진다. 강제 타입 변환은 다음과 같이 변환하고자 하는 타입을 괄호 사이에 지정한다.


short var;

int n = 855638017; // 855638017을 16진수로 나타내면 0x33000001

var = (short) n; // overflow로 인해서 var에 저장되는 값은 1이다.


강제로 타입 변환을 하게 되면 원본 데이터의 손실이 발생할 수 있는데, 변환하고자 하는 데이터의 값이 커서 데이터의 손실이 발생하는 경우도 있지만 데이터 타입의 특성상 데이터 손실이 발생할 수도 있다.

반응형

'Java > Java 기본' 카테고리의 다른 글

연산자  (0) 2018.06.09
자바에서의 키 입력  (0) 2018.06.08
변수와 상수  (0) 2018.06.08
자바의 데이터 타입  (0) 2018.06.08
이름 붙이는 관습  (0) 2018.06.07