늦은 프로그래밍 이야기

타입 변환 본문

내일배움캠프/Java 기초

타입 변환

한정규 2022. 11. 17. 17:54

타입 변환 (Type Conversion)

 - 하나의 타입을 다른 타입으로 바꾸는 것

 - boolean형을 제외한 나머지 기본 타입 간 타입 변환을 자유롭게 수행할 수 있다.


자바의 연산

 - 자바에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행한다.

 - 메모리의 크기가 상대적으로 작은 타입에서 타입으로의 타입 변환은 생략할 수 있다.

 - 하지만 메모리의 크기가 타입에서 작은 타입으로의 타입 변환은 데이터의 손실이 발생한다.

 - 따라서 상대적으로 작은 타입으로 타입 변환을 할 경우 자바 컴파일러는 오류를 발생시킨다.


타입 변환의 종류

  • 묵시적 타입 변환 (자동 타입 변환)
  • 명시적 타입 변환 (강제 타입 변환)

 

묵시적 타입 변환 (Implicit Conversion)

 - 대입 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 타입 변환.

 - 데이터의 손실이 발생하지 않거나, 최소화 되는 방향으로 묵시적 타입 변환을 진행한다.

 - 데이터의 손실이 발생하는 대입 연산은 허용되지 않는다.

 

 - 예시

① double num1 = 10;

② int num2 = 3.14; // 에러

③ double num3 = 7.0f + 3.14;

System.out.println(num1); // 10.0
System.out.println(num3); // 10.14

 ① double형 변수에 int형 데이터를 대입하므로, int형 데이터가 double형으로 자동 타입 변환된다.

 ② int형 변수가 표현할 수 있는 범위보다 큰 double형 데이터를 대입하므로, 데이터의 손실이 발생하여 컴파일러 오류가 발생한다.

 ③ float형 데이터와 double형 데이터의 산술 연산이므로, 데이터 손실을 최소화 하도록 double형으로 자동 타입 변환된다.

 

 - 따라서 다음과 같은 방향으로 자동 타입 변환이 이루어진다.

byte형 → short형 → int형 → long형 → float형 → double형
         char형 ↗

명시적 타입 변환 (Explicit Conversion)

 - 사용자가 타입 캐스트(type cast) 연산자를 사용하여 강제적으로 수행하는 타입 변환.

(변환할타입) 변환할데이터

 

 - 예시

int num1 = 1, num2 = 4;

① double result1 = num1 / num2;
② double result2 = (double) num1 / num2;

System.out.println(result1); // 0.0
System.out.println(result2); // 0.25

 ① 산술 연산을 수행하고 얻는 결과값의 타입은 언제나 피연산자의 타입과 일치해야 한다. 즉, int형 데이터끼리의 산술 연산에 대한 결과값은 언제나 int형의 결과로 나오게 된다. 따라서 1/4의 결과로는 0.25가 반환되지만, int형으로 자동 타입 변환되어 0이 반환되게 되고, double형 변수에 그 결과가 대입될 때 double형으로 자동 타입 변환되어 0.0이라는 결과가 출력되게 된다.

 ② 피연산자 중 하나의 타입이 double형이 되면, 나눗셈 연산을 위해 나머지 하나의 피연산자도 double형으로 자동 타입 변환된다. 따라서 결과 또한 double형인 0.25가 되고, double형 변수에 제대로 대입된다.


Comments