☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE04 타입변환

조반짝 2023. 8. 17. 16:35
728x90
반응형

타입변환

데이터타입을 다른 데이터 타입으로 변환하는것 

promotion 자동타입변환

자동타입변환 : 자동으로 타입변환이 일어나는 것

자동타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될때 발생

①  값의 허용 범위 작은타입 →  값의 허용 범위 큰 타입
②  정수타입(Int, char, short, long, byte) → 실수타입(float, double)
③  char 타입 : int타입으로 자동 타입 변환되면 유니코드 값이 int타입에 저장된다.
④  byte 타입: char타입으로 자동 타입 변환이 안된다. 왜냐하면 char타입의 허용 범위는 음수를 포함하지 않는데
                       byte 타입은 음수를 포함하기 때문이다.

기본타입을 허용 범위 크기 순으로 정리

byte < short < int < long < float < double

package chapter02.sec03.exam01;

public class PromotionExample {
	public static void main(String[] args) {
		
		//자동 타입 변환
		byte byteValue = 10;
		int intValue = byteValue;
		System.out.println("intValue =" + intValue); //intValue = 10
		
		char charValue = '가';
		intValue = charValue;
		System.out.println("가의 유니코드값 = " + intValue); //가의 유니코드값 = 44032
		
		intValue = 50;
		long longValue = intValue;
		System.out.println("longValue = " + longValue); //longValue = 50
		
		longValue = 100;
		float floatValue = longValue;
		System.out.println("floatValue = " + floatValue); //floatValue = 100.0
		
		floatValue = 100.5F;
		float doubleValue = floatValue;
		System.out.println("doubleValue = " + doubleValue); //doubleValue = 100.0
		
	}
}

Casting 강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환 될 수 없다. 하지만 큰 허용 범위 타입을 작은 허용 타입으로 강제로 나눠서 저장할 수 있다.

강제 타입 변환은 캐스팅 연산자 괄호 () 를 사용 하는데, 괄호 안에 들어가는 타입은 나누는 단위이다.

 

실수 타입(float, double)은 정수타입(byte, short, int , long)으로 자동 변호나 되지않기때문에 강제타입변환을 사용한다.

double : 실수 (소수점) 강제변환하면 소수점은 버려지고 정수부분만 저장된다.

문자열을 char타입으로 강제 타입변환(casting)할 수 없다.

오류를 세가지 대안으로 추천해준다.

double의 강제변환은 정수밖에 담을 수 없기 때문에 소수점은 표현되지 않는다.

package chapter02.sec03.exam02;

public class CastingExample {
	public static void main(String[] args) {
		
		int intValue = 44032;
		char charValue = (char) intValue;
		System.out.println(charValue);
		
		long longValue = 500;
		intValue = (int) longValue;
		System.out.println(intValue);
		
		double doubleValue = 3.14;
		intValue = (int) doubleValue;
		System.out.println(intValue);
	}
}

정수타입의 연산 ByteOperation

 

정수 연산식에서 모든 변수가 int 타입으로 변환되는 것은 아니다.

두 피연산자 중 허용범위가 큰 타입으로 변환되어 연산을 수행한다.

LongOperation


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

 

자바에서 정수 여산의 결과는 정수가 되기 떄문에 x/y의 연산 결과는 0.5가 아니라 0이 되고, 0은 double 타입변수 reslut에 저장하므로 0.0이 되는것이다.

위 코드의 결과가 0.5가 되기 위해서는 x/y를 정수 연산이 아닌 실수연산(double, float)으로 변경해야한다.

 


OperationsPromotion 연산식

package chapter02.sec03.exam05;

// 연산식에서 자동 타입 변환에 대한 자바 프로그램 예시 소스 코딩입니다.
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); //30
		
		char charValue1 = 'A';
		char charValue2 = 1;
//		char charValue3 = charValue1 + charValue2;
		int intValue2 = charValue1 + charValue2;
		System.out.println("유니코드 = " + intValue2); //유니코드 = 66
		System.out.println("출력문자 = " + (char)intValue2); //출력문자 = B
		
		int intValue3 = 10;
		int intValue4 = intValue3/4;
		System.out.println(intValue4); //2: 2.5가 나와야하는데, int(정수)형이라서 2만 표현됨
		
		int intValue5 = 10;
//		int intValue6 = 10 / 4.0;
		double doubleValue = intValue5 / 4.0;
		System.out.println(doubleValue); //2.5
		
		int x = 1;
		int y = 2;
		double result = (double) x / y;
		System.out.println(result); //0.5
		
		
	}

}

 

 


StringConcat 문자열 결합 연산

+ 연산자는 두가지 기능이 있다.

피연산자가 모두 숫자일 때 덧셈 연산을 수행하지만,

피연산자 중 하나가 문자열일 경우에는 나머지 피연산자도 문자열도 자동 변환되어 문자열 결합 연산을 수행한다.

연산식에서 + 연산자가 연이어 나오면 앞에서부터 순차적으로 + 연산을 수행

먼저 수행된 연산이 덧셈 연산이라면 덧셈결과를 가지고 그 다음 + 연산을 수행

앞에서부터 순차적으로 + 연산을 수행하지 않고 우선 연산하고 싶은 부분이 있다면 해당 부분을 괄호()로 감싸주면 괄호는 최우선으로 연산을 수행

①    숫자 + 숫자     →  덧셈 연산        →     숫자
②    "문자열" + 숫자   →  "문자열"  +  "숫자"  → 결합연산  →  "문자열숫자"
③    숫자 + " 문자열 "   →  "숫자" + "문자열"  →  결합연산  →  "숫자문자열"

▶ 특정 부분을 우선 연산하고 싶을 경우

     앞에서부터 순차적으로 + 연산을 수행하지 않고 우선 연산하고 싶은 부분이 있다면 해당 부분을 괄호() 로 감싸준다.

      괄호는 최우선으로 연산을 수행한다.

package chapter02.sec03.exam06;

//문자열 결합 연산에 대한 자바 프로그램 소스 코딩 예시입니다.
public class StringConcatExample {

	public static void main(String[] args) {
		
		//숫자 연산
		int value = 10 + 2 +8;
		System.out.println("value = " + value); //value =20

		//문자열 결합연산
		String str1 = 10 + 2 + "8"; // 12 + 8 = "128"
		System.out.println("str1 = " + str1); //str1 = 128
	
		String str2 = 10 + "2" +8; // "102" + 8 = "1028"
		System.out.println("str2 = " + str2); // str2 = 1028

		String str3 = "10" + 2 + 8; // "102" + 8 = "1028"
		System.out.println("str3 = " + str3); // str3 = 1028
		
		String str4 = "10" + (2 + 8); // "10" + 10 = "1010"
		System.out.println("str4 = " + str4); // str4 = 1010
	}

}

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

프로그램에서 문자열을 기본타입으로 변환하는 경우가 매우 많다.

문자열 → 정수 및 실수타입으로 변환

 

parse : 매개변수를 ()타입으로 변환해주는 메서드

ex) parseByte: 매개변수를Byte 타입으로 변환

 

* 문자열이 숫자가 아닌 알파벳이나 특수문자, 한글을 포함하고 있을 경우 숫자 타입으로 변환 시도하면 숫자형식예외(NumberFormatException)가 발생

기본타입(byte, short, char, int, long,float, double, boolean)의 값을 문자열로 변경하는 경우에는 간단히

String.valueOf()메소드를 이용

String str = String.valueOf(기본타입값);

 

숫자를 문자열로 변환하기

package chapter02.sec03.exam07;

// 기본 타입(Primitive Type)과 문자열(String) 간의 변환에 대한 자바 프로그램 예시
public class PrimitiveAndStringConversionExample {
	
	public static void main(String[] args) {
		
		String str1 = "10";
		int value1 = Integer.parseInt(str1);
				System.out.println("value1 =" + value1); //value1 =10
		
		String str2 = "3.14";
		double value2 = Double.parseDouble(str2);
		System.out.println("value2 =" + value2); //value2 = 3.14
		
		String str3 = "true";
		boolean value3 = Boolean.parseBoolean(str3);
		System.out.println("value3 = " + value3); //value3 = true
		
		int num1 = 10;
		String str4 = String.valueOf(num1);
		System.out.println("str4 =" + str4); //str4 =10
		
		double num2 = 3.14;
		String str5 = String.valueOf(num2);
		System.out.println("str5 = " + str5); //str5 = 3.14
		
		boolean tf = true;
		String str6 = String.valueOf(tf);
		System.out.println("str6 =" + str6); //str6 = true
	}
}

 

728x90
반응형