본문 바로가기
프로그래밍언어/Java

02-3. 타입변환

by 스꼬맹이브로 2020. 12. 30.
728x90
반응형
SMALL

- 타입 변환이란?
  : 데이터 타입을 다른 데이터 타입으로 변환하는 것

 

<자동 타입 변환>

  • 자동 타입 변환(promotion)
    • 자동으로 타입 변환이 일어나는 것을 의미
    • 값의 허용범위가 작은 타입이 허용범위가 큰 타입으로 저장될 때 발생
    • 프로그램 실행 도중에 자동으로 타입 변환이 일어나는 것을 말함
  • 기본 타입 크기 순 : byte <short <int <long <float <double
  • 자동 타입 변환에서의 예외 
    : char타입은 음수를 포함하지 않기 때문에 byte 타입에서 char타입으로 자동 변환 불가능
public class PromotionExample {
	public static void main(String[] args) {
		
		//byte -> int 자동 타입 변환
		byte byteValue = 10;
		int intValue = byteValue;
		System.out.println("intValue: " + intValue);
		
		//char -> int 자동 타입 변환
		char charValue = '가';
		intValue = charValue;
		System.out.println("가의 유니코드: " + intValue);
		
		//int -> long 자동 타입 변환
		intValue = 50;
		long longValue = intValue;;
		System.out.println("longValue: " + longValue);	
		
		//long -> float 자동 타입 변환
		longValue = 100;
		float floatValue = longValue; 
		System.out.println("floatValue: " + floatValue);
		
		//float -> double 자동 타입 변환
		floatValue = 100.5F;
		double doubleValue = floatValue;
		System.out.println("doubleValue: " + doubleValue);
	} 
}

  결과 :

<강제 타입 변환>

  • 강제 타입 변환(캐스팅 : casting) : 큰 허용범위 타입을 작은 허용범위 타입으로 강제로 나눠서 저장하는 것
public class CastingExample {
	public static void main(String[] args) {	
		
		//int -> char 강제 타입 변환
		int intValue = 44032;
		char charValue = (char) intValue;
		System.out.println(charValue);
		
		//long -> int 강제 타입 변환
		long longValue = 500;
		intValue = (int) longValue;
		System.out.println(intValue);
		
		//double -> int 강제 타입 변환
		double doubleValue = 3.14;
		intValue = (int) doubleValue;
		System.out.println(intValue);	
	} 
}

결과 : 

 

<정수 연산에서의 자동 타입 변환>

  • 정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte, short 타입의 변수는
    int 타입으로 자동 타입 변환되어 연산을 수행

  • 예외 사항 : 피연산자가 변수가 아닌 일반 상수일 때에는 에러가 발생하지 않음

  • 모든 변수가 int 타입으로 변환되는 것은 아니다.
    → 피연산자 중 허용 범위가 큰 타입으로 변환되어 수행

<실수 연산에서의 자동 타입 변환>

  • 산술연산식에서 두 피연산자가 동일한 타입이라면 해당 타입으로 연산되지만,
    하나가 double 타입이라면 다른 피연산자도 double타입으로 자동 타입 변환되어 연산을 수행

        * 올바른 연산 방법

public class OperationsPromotionExample {
	public static void main(String[] args) {	
		byte byteValue1 = 10;
		byte byteValue2 = 20;
		//byte byteValue3 = byteValue1 + byteValue2;   //컴파일 에러
		int intValue1 = byteValue1 + byteValue2;
		System.out.println(intValue1);
		
		char charValue1 = 'A';
		char charValue2 = 1;
		//char charValue3 = charValue1 + charValue2;   //컴파일 에러
		int intValue2 = charValue1 + charValue2;
		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;   //컴파일 에러
		double doubleValue = intValue5 / 4.0;
		System.out.println(doubleValue);
		
		int x = 1;
		int y = 2;
		double result = (double) x / y;
		System.out.println(result);
	} 
}

결과 :

 

<'+' 연산에서의 문자열 자동 타입 변환>

  • + 연산의 두가지 기능
    • 모두 숫자일 경우 : 덧셈 수행
    • 피연산자 중 하나가 문자열일 경우 : 나머지 피연산자도 문자열로 자동 형변환되어 문자열 결합 연산 수행

  * 특정 부분을 먼저 연산하고 싶은 경우에는 해당 부분을 괄호()로 감싼 후 연산

 

<문자열을 기본 타입으로 강제 타입 변환>

  * 문자열이 숫자를 제외한 알파벳이나 특수문자, 한글 등을 포함하고 있으면 예외 발생

  *반대로 문자열로 변경하고 싶을 경우 String.valueOf() 사용

728x90
반응형
LIST

'프로그래밍언어 > Java' 카테고리의 다른 글

03-1. 연산자와 연산식  (0) 2021.01.05
02-4. 변수와 시스템 입출력  (0) 2021.01.04
02-2. 기본타입  (0) 2020.12.29
02-1. 변수  (0) 2020.12.28
01-3. 자바 프로그램 개발 과정(2)  (0) 2020.12.25