본문 바로가기

Java/Learn_Java

2. 변수와 타입_3. 타입 변환

** 여기 있는 모든 코드의 package는 chapter2로 지정했습니다.

코드를 eclipse 등에서 실행하고 싶으면 chapter2로 package를 지정하거나 package chapter2;를 지우세요.

 

타입 변환

어떤 데이터 타입을 다른 데이터 타입으로 바꾸는 것

(ex. byte→int, int등)

 

- 자동 타입 변환(Promotion)

프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것

작은 크기를 가지는 타입이 큰 크기를 가지는 타입으로 저장할 때 발생한다.

여기서 크기는 타입이 사용하는 메모리(byte) 크기로 판단한다.

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

이런 순서로.

타입 변환이 발생하면 변환 이전과 이후의 값은 동일하다.

마치 작은 그릇의 물을 큰 그릇의 물로 옮겨도 물의 양은 동일하듯이.

단, byte타입을 char 타입으로 변환할 수는 없다.

//PromotionExample.java
package chapter2;

public class PromotionExample {
	public static void main(String[] args) {
		byte byteValue = 10;
		int intValue = byteValue; // int <- byte
		System.out.println(intValue);

		char charValue = '가';
		intValue = charValue; // int <- char
		System.out.println("가의 유니코드: " + intValue);

		intValue = 500;
		long longValue = intValue; // long <- int
		System.out.println(longValue);

		intValue = 200;
		double doubleValue = intValue; // double <- int
		System.out.println(doubleValue);
	}
}

 

- 강제 타입 변환(Casting)

강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개 저장하는 것.

"큰 그릇의 물을 작은 그릇의 사이즈만큼만 넣고 버리는 것"

int를 byte에 넣는다면, 4byte의 int중 1byte만 쪼개 byte에 넣는 것.

//CastingExample.java
package chapter2;

public class CastingExample {
	public static void main(String[] args) {
		int intValue = 44032;
		char charValue = (char) intValue; // int 타입인 변수 intValue를 char 타입으로 casting
		System.out.println(charValue);

		long longValue = 500;
		intValue = (int) longValue; // long 타입인 변수 longValue를 int 타입으로 casting
		// 즉, literal 44032인 intValue를 longValue의 literal인 500으로 저장 후, int로 casting한 것
		System.out.println(intValue);

		double doubleValue = 3.14;
		intValue = (int) doubleValue;// double 타입인 변수 doubleValue를 int 타입으로 casting
		// 즉, literal 500인 intValue를 doubleValue의 literal인 3.14으로 저장 후, int로 casting한 것
		// int 타입은 정수이므로 소숫점은 다 버린다.
		System.out.println(intValue);
	}
}

- 연산식에서의 자동 타입 Casting

서로 다른 타입의 피연산자가 있을 경우

두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행한다.

//OperationsPromotionExample.java
package chapter2;

public class OperationsPromotionExample {
	public static void main(String[] args) {
		byte byteValue1 = 10;
		byte byteValue2 = 20;
//		byte byteValue3 = byteValue1 + byteValue2; //java는 정수 연산을 int로 하므로, byte끼리는 연산 불가
		int intValue1 = byteValue1 + byteValue2; // byte 연산을 위한 byte to int Promotion
		System.out.println(intValue1);

		char charValue1 = 'A';
		char charValue2 = 1;
//		char charValue3 = charValue1 + charValue2; java는 정수 연산을 int로 하므로, char끼리는 연산 불가
		int intValue2 = charValue1 + charValue2; // char 연산을 위한 char to int Promotion
		System.out.println("유니코드=" + intValue2);
		System.out.println("출력문자=" + (char) intValue2);

		int intValue3 = 10;
		int intValue4 = intValue3 / 4;
		System.out.println(intValue4);

		int intValue5 = 10;
//		int intValue6 = 10 / 4.0 //int에선 실수 연산을 할 수 없다.
		double doubleValue = intValue5 / 4.0;
		System.out.println(doubleValue);
	}
}

 

'Java > Learn_Java' 카테고리의 다른 글

4. 조건문과 반복문_활용문제  (0) 2020.03.29
3. 연산자_연습문제  (0) 2020.03.29
3. 연산자  (0) 2020.03.28
2. 변수와 타입  (0) 2020.03.28
Intro  (0) 2020.03.28