늦은 프로그래밍 이야기
타입 변환 본문
타입 변환 (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형 변수에 제대로 대입된다.
'내일배움캠프 > Java 기초' 카테고리의 다른 글
| continue, break (0) | 2022.11.22 |
|---|---|
| 연산자의 우선순위와 결합방향 (0) | 2022.11.17 |
| 실수의 표현 방식 (0) | 2022.11.17 |
| 기본 자료형의 메모리 크기와 데이터 표현 범위 (0) | 2022.11.17 |
| 컬렉션, 제네릭스 (0) | 2022.11.16 |