본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch2 자동 타입 변환 및 변수 범위

728x90
반응형

◎ 자동 타입 변환

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

   ▷ 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생

   ▷ 정수 타입이 실수 타입으로 대입되면 무조건 자동 타입 변환 됩니다.

   ▷ 예외 : char 타입보다 허용 범위가 작은 byte 타입은 char 타입으로 자동 변환될 수 없습니다.

 

byte < short, char < int < long < float < double
                                        정수 / 실수

 

 

◎ 자동 타입 변환 예제

public class TypeChangExample2 {
	public static void main(String[] args) {
		
		byte byteValue = 10;
		int intValue = byteValue; //자동 타입 변환
		
		long longValue = 5000000000L;
		float floatValue = longValue;    // 5.0E9f
		double doubleValue = longValue;  // 5.0E9
		
		char charValue = 'A';
		int inValue = charValue; // 65
		
		byteValue = 65;              // 1byte byte형은 char형에 대입 불가 자동 형변환X
//		char charValue = byteValue;  // 에러
	}
}

 

public class PromotionExample {
	public static void main(String[] args) {
		
		byte byteValue = 10;
		int intValue = byteValue;
		System.out.println("intValue : " + intValue);
		
		char charValue = '가';
		intValue = charValue;
		System.out.println("intValue : " + intValue);
		
		intValue = 50;
		long longValue = intValue;
		System.out.println("longValue : " + longValue);
		
		longValue = 100;
		float floatValue = longValue;
		System.out.println("floatValue : " + floatValue);
		
		floatValue = 100.5F;
		double doubleValue = floatValue;
		System.out.println("doubleValue : " + doubleValue);
	}
}

// 출력 : 
// intValue : 10
// intValue : 44032
// longValue : 50
// floatValue : 100.0
// doubleValue : 100.5

 

 

◎ 강제 타입 변환

   ▷ 큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개서 저장하는 것

   ▷ 캐스팅 연산자로 괄호()를 사용하며, 괄호 안에 들어가는 타입은 쪼개는 단위

 

작은 허용 범위 타입 = (작은 허용 범위 타입) 큰 허용 범위 타입

예)
int → byte 강제 타입 변환
byte의 범위 안에 있는 값까지만 변환 가능합니다.

 

 

◎ 연산식에서 자동 타입 변환

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

   ▷ byte 변수가 피연산자로 사용되면 변수 값은 int 값으로 연산되며, 결과 역시 byte 변수가 아닌 int 변수에 저장해야 합니다.

 

int result = (byte 타입, char 타입, short 타입, int 타입) + 연산자 + (byte 타입, char 타입, short 타입, int 타입)

 

 

◎ String 타입 변환하기

   ▷ 기본 타입의 값을 문자열로 변경할 때는 String.valueOf()메소드를 이용합니다.

NO 변환 타입 사용 예
1 String → byte byte value = Byte.parseByte(str);
2 String → short short value = Short.parseShort(str);
3 String → int int value = Integer.parseInt(str);
4 String → long long value = Long.parseLong(str);
5 String → float float value = Float.parseFloat(str);
6 String → double double value = Double.parseDouble(str);
7 String → boolean boolean value = Boolean.parseBoolean(str);

 

 

◎ 변수 범위를 나타내는 중괄호 {} 블록

   ▷ 조건문과 반복문의 중괄호 {} 블록 내에 선언된 변수는 해당 중괄호 {} 블록 내에서만 사용 가능합니다.

 

▷ 전역변수 : var1(main 내부에서 해당 변수를 다 사용할 수 있습니다.)
 지역변수 : var2, var3 (if문, for문 내에서만 사용 가능합니다.)

 

 

◎ println() 메소드로 변수 값 출력하기

   ▷ 모니터에 값을 출력하기 위해 System.out.println() 이용

   ▷ 출력 방법에 따라 print(), printf()도 사용할 수 있습니다.

 

NO 메소드 의미
1 println(내용); 괄호 안의 내용을 출력하고 행을 바꿔라.
2 print(내용); 괄호 안의 내용을 출력하고 행은 바꾸지 마라.
3 printf("형식문자열", 값1, 값2, ...); 형식 문자열에 맞춰 뒤의 값을 출력하라.

 

  ▷ printf()의 형식 문자열에서는 %와 conversation(변환 문자)를 필수로 작성하고 나머지는 생략 가능합니다.

 

public class printfExample {
	public static void main(String[] args) {
		int value = 123;
		System.out.printf("상품의 가격 : %d원\n", value);   // %d : 정수형
		System.out.printf("상품의 가격 : %6d원\n", value);  // %6d : 정수형 6자리 뒤에서부터 입력
		System.out.printf("상품의 가격 : %-6d원\n", value); // %-6d : 정수형 6자리 앞에서부터 입력
		System.out.printf("상품의 가격 : %06d원\n", value); // %06d : 빈칸은 0으로 채움
		
		double area = 3.14159 * 10 * 10;
		System.out.printf("반지름이 %d인 원의 넓이 : %10.2f\n", 10, area);
        // %10.2f : 실수형 소숫점 2째 자리까지 출력하시오, 소숫점 포함 10자리를 출력하시오. 
		
		String name = "홍길동";
		String job = "도적";
		System.out.printf("%6d | %-10s | %10s\n", 1, name, job); // %s는 문자형 출력
	}
}

// 출력
// 상품의 가격 : 123원
// 상품의 가격 :    123원
// 상품의 가격 : 123   원
// 상품의 가격 : 000123원
// 반지름이 10인 원의 넓이 :     314.16
//      1 | 홍길동        |         도적



 

 

◎ Scanner 타입 변수 활용하기

   ▷ class 바깥쪽에서 'import java.util.Scanner;'로 Scanner 함수를 가져옵니다.

 

Scanner sc = new Scanner(System.in);

sc는 다른 변수로 바꿔도 상관 없습니다.

 

 

◎ Scanner 활용 예시

import java.util.Scanner;

public class ScannerExample {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);  //Scanner 객체 생성
		
		System.out.print("x 값 입력 : ");
		String strX = scanner.nextLine();
		int x = Integer.parseInt(strX);

		System.out.print("y 값 입력 : ");
		String strY = scanner.nextLine();
		int y = Integer.parseInt(strY);
		
		int result = x + y;
		System.out.println("x + y: " + result);
		System.out.println();
		
		
		while(true) {
			System.out.print("입력 문자열 : ");
			String data = scanner.nextLine();
			if(data.equals("q")) {
				break;
			}
			System.out.println("출력 문자열: " + data);
			System.out.println();
		}
		System.out.println("종료");		
	}
}

// 출력 :
// x 값 입력 : 5
// y 값 입력 : 11
// x + y: 16

// 입력 문자열 : e
// 출력 문자열: e

// 입력 문자열 : q
// 종료


strX, strY에 문자를 넣으면 x, y 값에 정수형으로 변환시켜서 넣을 수 없기 때문에 오류가 나타납니다.

아래의 while문은 q라는 문자가 입력될 때까지 while 내부의 코드를 반복해서 수행합니다. 

 

변수를 자동 변환시켜보는 함수에 대해 알아봤습니다.

 

어떻게하면 변수의 형태를 변환 시킬 수 있는지에 대해서 조금은 더 이해가 되는 것 같네요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형