BackEnd/Java

[Java]변수 실전예제2

Hojung7 2024. 7. 21. 00:03

 

1. 컴퓨터 값 처리 원칙

 - 같은 자료형 끼리만 연산이 가능하고 결과도 같은 자료형만 반환된다

 

<형변환(Casting)>

 

데이터의 자료형을 변환

 

 <자동 형변환>

 

값의 범위가 서로 다른 값들의 연산 시 "컴파일러"가 자동으로 범위가 작은 값을 큰 값의 자료형으로 변환

 

<강제 형변환>

 

  - 값의 범위가 큰 자료형 -> 작은 자료형으로 변환

 

 (데이터 손실을 고려해야 함)

 

 - 의도적으로 자료형을 변환할 때

 

 [작성법]

 

 (자료형)변수명 ;

          or

 (자료형)값;

 

- 변수명 / 값이 지정된 자료형을 변환

 

# 예제1

package ex;

public class VariableEx2 {
	
	public static void main(String[] args) {
		
		
		 System.out.println("[자동 형변환 예시]");
		 
		 int num1a = 12;
		 double num1b = 1.3;
		 	
                 // 1) 다른 자료형 끼리 연산
		 // 12 + 1.3 => 12.0 + 1.3 => 13.3
		 System.out.println(num1a + num1b);
	
		 // 2) 같은 자료형 끼리 연산
		 //     (컴퓨터 값처리 원칙과 연관성이 깊은)
		 int num2a = 3;
		 int num2b = 2;
		 
		 // (int)3/ (int)2 => (double)1.5 => (int)1
		 System.out.println(num2a / num2b); // 3/2 ==
		 
		 // 3) 여러 자료형 연산
		 int num3a = 999;
		 long num3b = 10000000000L;
		 
		 // 999+ 100000000L
		 // -> 999L + 100000000L = 10000000099L (long)
		 // double result3 = 100000000999L (long)
		 
		 // -> double result3 = 100000000999.0; (double)
		 double result3 = num3a + num3b;
		 System.out.println(result3); //1.0000000999E10(부동 소수점)
		 
	//-------------------------------------------------------------------
    /*  [자동 형변환이 되지 않는 경우] 
     *	값의 범위가 더 큰 자료형을 
     *	값의 범위가 더 작은 변수에 대입 불가
     *
     *-> 억지로 대입하려면 "강제 형변환"을 이용
     */	
		 
	int a = 100;
	double b = 23.4;
	
	// int result = a + b; // a+b = 100.0 + 23.4
							  // = 123.4(double)
	
    ]

]

 

 

#결과

 

#예제2

	 System.out.println("[강제 형변환 데이터 손실 확인 1]");
		 
		 int num1 = 290;
		 byte result1 = (byte)num1; // byte 강제 형변환
		 
		 System.out.println("num1 : " + num1); // 290
		 System.out.println("result1 : " + result1); //34

 

#결과

 

#예제3

 System.out.println("[강제 형변환 데이터 손실 확인 2]");
		 
		 // 실수를 정수로 강제 형변환
		 // -> 소수점 버림
		 // -> 실수를 정수로 변환
		 // -> 정수 부분만 확인 (손실 활용)
		 
		 double num2 = 123.456789;
		 int result2 = (int)num2; // int 강제 형변환
		 
		 System.out.println("num2 : " + num2);
		 System.out.println("result2 : " + result2);
		 
		 // (자동 형변환)
		 System.out.println(num2 - result2); // 0.456789
		 // -> 0.45678900000000056 (2진수 소수 표현 시 문제점)
		 
		 /* 난수 + 강제 형변환 */
		
		 // 난수 : Math.random()
		 // 범위 : 0.0 <= x < 1.0
		 // 자료형 : double
		 
		 // 1~ 10 사이 난수(정수)
		 // -> 강제 형변환을 이용해 소수점 제거
		 int randomNumber = (int)(Math.random() * 10 + 1);
				 
		 System.out.println("randomNumber : " + randomNumber);

 

#결과

 

#예제4

 System.out.println("[의도적으로 강제 형변환]");
		 System.out.println(123); // 123
		 System.out.println((double)123); //123.0

 

#결과

 

#예제5

 System.out.println("[문자(char) <-> 유니코드(int)]");
		 
		 System.out.println("A의 번호 : " + (int)'A'); // 65
		 System.out.println("a의 번호 : " + (int)'a'); //97
		 
		 System.out.println("정 번호 : " + (int)'정'); // 51221
		 System.out.println("호 번호 : " + (int)'호'); // 54840
		 System.out.println("정 번호 : " + (int)'정'); // 51221
		 
		 System.out.println("ㄱ 번호 : " + (int)'ㄱ'); // 12593
		 
		 System.out.println("ㄱ 다음은? : " +  (char)('ㄱ'+1)); // ㄲ
		 
		 System.out.println("ㄱ + 2은? : " +  (char)('ㄱ'+2)); // ㄳ
		 
		 System.out.println("ㄱ + 3은? : " +  (char)('ㄱ'+3)); // ㄴ

 

#결과

 

#예제6

 System.out.println("[오버 플로우]");
		 
		 // 오버 플로우 (overflow)
		 // - 연산 결과가 자료형의 값의 범위를 초과(+)한 경우 
		 
		 // int 자료형 최대 범위 초과
		 int max = Integer.MAX_VALUE; // int 최대값
		 
		 System.out.println("max : " + max); //  2147483647
		 System.out.println("max +1 : " + (max + 1)); // -2147483648

 

#결과

 

#값 대입 불가한 경우

final double PI = 3.141592;
		
		final int NATIONAL_CODE = 82;
		
		//NATIONAL_CODE = 11; // 오류 발생 (값 대입 불가)

 

[상수]

 

 - 한 번 값을 대입하면 바꿀 수 없는 변수

 

 [작성법]

 

 final 자료형 변수명 = 값;

 

 → 변수명은 대문자 + _ 형식으로 작성

 

 

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

[Java]Control 조건문(Condition)  (0) 2024.07.21
[Java]Operator  (0) 2024.07.21
[JAVA]01_변수 실전예제1  (0) 2024.07.20
[JAVA]변수 Scanner  (1) 2024.07.20
[JAVA]변수 Print  (1) 2024.07.18