JAVA 형 변환(casting), 데이터타입 변환

JAVA 데이터 타입의 변환 (casting)


메모리에 저장하는 크기
byte < short < int < long < float < double


java에서는 데이터 타입을 변환하는것을 casting이라고 한다.

데이터 타입 자동형변환은 upcasting, 데이터 타입 수동현변환은 downcasting 이라고 한다.


정수를 데이터로 가진 변수앞에 int가 아닌 double을 작성하면 에러가 발생해야한다. 하지만 에러가 발생하지않는다. 

ex) double a = 1;

왜냐하면 변수명 앞에 double을 적으면 정수 1을 실수 1.0으로 반환하여 결과값을 리턴한다.

이럴경우 잃어버리는 값 즉 값의 손실이 발생하지 않는다. 이러한 현상을 자동 형변환 이라고 한다.


하지만 반대로

ex) int a = 1.1;

이렇게 실수데이터를 가진 변수앞에 정수형데이터타입을 적으면 에러가 발생한다.

앞선 예시에서의 정수의 경우 .0을 붙여줬기 때문에 값에 손실이 발생하지 않는다.

하지만 실수 데이터타입을 정수데이터타입으로 자동으로 변환하면 뒤에 소숫점 0.1의 손실이 발생하게 되므로 오류를 발생한다. 이런경우 명시적 형변환을 해주어야한다.




자바의 경우 변수에 값을 대입할때 오른쪽부터 계산하는데 1.1은 실수로 인식되며 이것을 정수형인 int형 데이터타입에 저장하고자 할 때 앞에 변환하고자하는 데이터 타입을 작성해주면 값의 손실이 발생하더라도 값을 저장할 수 있다.



즉 데이터 손실이 발생하면서 데이터의 타입을 변환하고자한다면 앞에 명시적으로 변환하고자하는 데이터타입을 작성해줘야한다. 괄호 ()안의 데이터타입으로 값을 반환하여 저장한다.

데이터의 손실이 발생하지 않을 경우 java가 자동형변환을 시켜주므로 데이터 앞에 명시적으로 데이터타입을 작성할 필요는 없다.

이렇게 명시적 형변환을 사용해야하는경우는 데이터의 크기가 큰것을 작은 공간에 저장하고자 할때이다.


메모리에 저장하는 크기 순서는 아래와 같다.
byte < short < int < long < float < double
           (char)

어느값이든 double형에 저장이 가능하다. 또한 자동 형변환이 된다.

하지만 double형의 데이터 값을 short에 저장하고자 하면 앞에 명시적으로 형변환을 시켜주어야한다.


작은데이터가 큰데이터에 저장은 가능하나 큰데이터는 작은데이터에 저장이 불가능하다.
**예외 : int형은 char형에 저장이 가능하다. 문자도 숫자이기 때문이다.(아스키코드)


댓글