Java의 유형 캐스팅이란 무엇입니까?

데이터 유형은 수행할 수 있는 작업과 함께 저장할 수 있는 값의 유형을 지정하는 미리 정의된 값 집합입니다.
Java Type Casting은 한 데이터 유형을 다른 데이터 유형으로 변환하는 프로세스입니다.
이는 암시적일 수도 있고 명시적일 수도 있습니다 . 자동 타입 캐스팅이라고도 알려진 암시적 타입 캐스팅은 컴파일러에 의해 수행됩니다. 명시적 유형 변환은 코드에서 프로그래머가 수동으로 수행합니다.

타입 캐스팅이 필요한 이유는 무엇입니까?

Java에는 메모리에 다른 공간이 필요한 다양한 기본 데이터 유형이 있습니다. 이로 인해 한 데이터 유형의 값을 다른 데이터 유형에 할당하는 동안 호환성 문제가 발생할 수 있습니다. 데이터 유형이 이미 호환되는 경우 컴파일러가 자동으로 유형 변환을 수행합니다. 따라서 타입 캐스팅은 프로그램에서 다양한 데이터 유형을 처리할 때 주요 호환성 문제를 해결합니다.

Java 유형 캐스팅의 유형

Java에는 두 가지 유형의 유형 캐스팅이 있습니다.
  1. 확대 유형 캐스팅 — 암시적 또는 자동 유형 캐스팅이라고도 함
  2. Narrowing Type Casting - 명시적 또는 수동 유형 캐스팅이라고도 함

확폭형 주조

확장형 형변환(Widening typecasting)은 이름에서 알 수 있듯이 작은 데이터 유형을 더 큰 데이터 유형으로 확장하는 것을 의미합니다. 작은 유형을 큰 유형으로 변환하려는 경우 이러한 유형 변환을 수행합니다. 데이터 유형은 서로 호환되어야 합니다. 숫자에서 char 또는 부울 유형으로의 암시적 변환은 없습니다. Java에서는 char 및 boolean 유형이 호환되지 않습니다.
바이트 -> 짧은 -> 문자 -> int -> 긴 -> 부동 소수점 -> 더블
이러한 유형의 캐스팅은 정보 손실 없이 컴파일러에 의해 자동으로 수행됩니다. 프로그래머의 외부 트리거가 필요하지 않습니다.

//Automatic type conversion
public class WideningExample {
   public static void main(String[] args) {

       int i = 100;
       System.out.println("int value: " + i);

       // int to long type
       long l = i;
       System.out.println("int to long value: " + l);

       // long to float type
       float f = l;
       System.out.println("int to float value: " + f);


       byte b = 1;
       System.out.println("byte value: " + b);

       // byte to int type
       i = b;
       System.out.println("byte to int value: " + i);

       char c = 'a';
       System.out.println("char value: " + c);

       // char to int type
       i = c;

       // prints the ASCII value of the given character
       // ASCII value of 'a' = 97
       System.out.println("char to int value: " + i);
   }
}

산출

int 값: 100 int에서 long 값: 100 int에서 float 값: 100.0 byte 값: 1 byte에서 int 값: 1 char 값: char에서 int 값: 97

설명

위의 코드에서는 컴파일러가 자동으로 수행하는 확장형 형변환을 보여주었습니다. 우선 int , bytechar 에 값을 할당했습니다 . 그런 다음 int 값을 longfloat 에 할당했는데 둘 다 int 보다 큽니다 . 또한 bytechar 값을 int 에 할당했습니다 . bytechar 는 모두 int 보다 작은 데이터 유형이므로 이러한 변환은 암시적이었습니다.

협소형 주조

이름에서 알 수 있듯이 Narrowing typecasting은 더 큰 데이터 유형을 더 작은 데이터 유형으로 좁히는 것을 의미합니다. 우리는 큰 유형을 작은 유형으로 변환하려고 할 때 이 유형 변환을 수행합니다.
double -> float -> long -> int -> char -> short -> 바이트
이러한 유형의 캐스팅의 경우 자체 변환을 지정하여 Java의 기본 변환을 재정의합니다. 이를 달성하기 위해 대상 데이터 유형 앞에 유형 변환이 필요한 변수 또는 값을 괄호 '()' 안에 작성합니다. 그러나 이러한 유형의 주조로 인해 정밀도가 손실될 수 있습니다.

//Manual Type Conversion
public class NarrowingExample {
   public static void main(String[] arg) {

       // double data type
       double d = 97.04;
       // Print statements
       System.out.println("double value: " + d);

       // Narrowing type casting from double to long
       // implicitly writing the target data type in () followed by initial data type
       long l = (long) d;

       // fractional part lost - loss of precision
       System.out.println("long value: " + l);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       int i = (int) l;

       // fractional part lost - loss of precision
       System.out.println("int value: " + i);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       char c = (char) i;

       // displaying character corresponding to the ASCII value of 100
       System.out.println("char value: " + c);
   }
}

산출

double 값: 97.04 long 값: 97 int 값: 97 char 값: a

설명

축소 형변환은 프로그래머가 표준 구문을 사용하여 명시적으로 수행해야 합니다. 위 프로그램에서는 longint 데이터 유형 보다 큰 double 값으로 시작했습니다 . 우리는 원하는 대상 데이터 유형과 함께 괄호를 사용하여 이 double을 longint 로 유형 변환했습니다. 또한 'int'를 'char'로 수동으로 유형 변환했습니다.

결론

이 게시물을 마치면서 Java Type Casting에 대해 자세히 알아보셨기를 바랍니다. Java에서 두 가지 유형의 형변환을 배웠습니다. 또한 Narrowing typecasting을 사용하여 호환되지 않는 데이터 유형을 수동으로 캐스팅하는 방법도 배웠습니다. 더 깊이 이해하기 위해 다른 값을 가진 데이터 유형의 다른 조합을 직접 시도해 볼 수 있습니다. 개념을 더 깊이 이해하기 위해 계속 연습하세요. 그때까지 계속 성장하고 빛나세요!