본문 바로가기
  • Coding & Book
학습단/JAVA 학습단

2. 혼공자 2일차(변수 + 타입 +변환 + 입출력)

by 루이3 2023. 7. 4.

2일차

1. 변수

- 변수는 값을 저장할수 있는 메모리의 특정 번지에 이름을 붙이는 것입니다.

- 하나의 변수에 두가지 값을 저장 할 수 없습니다.

- 변수를 선언하기 위해서 타입 그리고 변수이름을 정해야 합니다.

- 값을 저장할때는 대입연산자인 = 를 사용합니다.

- 변수에 최초로 값이 저장되고 생성되는 것을 변수 초기화라고 합니다.

float pi = 3.14f;
int age;
double value;
int x, y, z;

 

 

변수 사용예시)

package sec03.exam02;

public class Variable {

	public static void main(String[] args) {
		int hour = 3;
		int minute = 5;
		System.out.println(hour + " 시간" + minute + " 분");
		
		int totalMinute = (hour*60) + minute;
		System.out.println("총 " + totalMinute + "분");
	}

}

결과

 

- 주의 할점으로 자바의 모든 변수는 { } 블록 내에서 선언되고 사용됩니다.

(따라서 아래와 같은 경우 v2를 사용 못해 컴파일 에러가 발생합니다.)

package sec03.exam04;

public class ScopeExampe {

	public static void main(String[] args) {
		int v1 =15;
		if(v1 > 10) {
			int v2;
			v2 = v1 -10;
		}
		int v3 = v1 + v2;
	}

}

 

 

2. 기본타입

- 정수 타입 byte, char, short, int, long

- 실수 타입 float, double

- 논리 타입 boolean

 

& 정수 타입 예시

- long 타입은 수치가 클때 주로 사용합니다.

- 하나의 문자를 작은 따옴표로 감싼것을 문자리터럴이라고 합니다.(유니코드로 변환되어 저장됩니다.)

- String은 기본 타입이 아닙니다.( 클래스 타입입니다.)

 

package sec02.exam;

public class EXAMPLE_1 {

	public static void main(String[] args) {
		int var1 = 0b1011;
		int var2 = 0xb3;
		System.out.println("var1 : " + var1 + ", var2 : " + var2);
		
		byte v1 = -128;
		byte v2 = 127;
		System.out.println("v1 : " + v1 + ", v2 : " + v2);
		
		long num1 = 10;
		long num2 =20L;
		System.out.println("num1 : " + num1 + ", num2 : " + num2);
		
		char n1 = 'A';
		char n2 = 65;
		System.out.println("n1 : " + n1 + ", n2 : " + n2);
		
		String a1 ="A";
		String a2 ="전우치";
		System.out.println("a1 : " + a1 + ", a2 : " + a2);
	}

}

실행 결과

 

 

& 실수 타입 예시

- 자바는 실수 리터럴을 기본적으로 double로 해석합니다.(따라서 float 타입으로 저장하고 싶으면 뒤에 f를 붙입니다.)

- double은 float 타입보다 약 2배의 정밀도를 갖고 있다는 의미로 붙여진 것입니다.

package sec02.exam;

public class Example02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		float var1 = 3.14f;
		double var2 = 3.1423423;
		
		System.out.println(var1);
		System.out.println(var2);
	}

}

실행결과

 

& 논리 타입 예시

- 참과 거짓을 의미하는 논리 리터럴입니다.

package sec02.exam;

public class Example03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean stop =true;
		if(stop) {
			System.out.println("중지됨");
		}
		else {
			System.out.println("실행됨");
		}
	}

}

결과

 

3. 타입 변환

& 자동 타입 변환

- 두 변수의 타입이 동일할 경우, 한쪽 변수 값을 다른쪽 변수에 복사해서 저장하는 것입니다.

- 값은 허용범위가 작은 타입이 허용범위가 큰 타입으로 저장 되어야 합니다.

- char 타입의 경우 int 타입으로 자동 타입 변환되면 유니코드 값이 int 타입에 저장됩니다.

 

범위

byte < short < int < long < float <double

 

package sec02.exam;

public class Example04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		Byte byteValue = 10;
		int intValue = byteValue;
		System.out.println(intValue);
		
		//char 에서 int형으로
		char charValue = 'B';
		int num = charValue;
		System.out.println(num);
	}

}

 

& 강제 타입 변환

-큰 허용 범위 타입을 강제로 작은 허용범위 타입으로  만드는것입니다.

(이과정에서 버려지는 숫자가 있을수 있습니다.)

package sec02.exam;

public class Example05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double doubleValue = 3.14;
		int intValue = (int)doubleValue;
		System.out.println(intValue);
	}

}

 

결과

 

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

-int 타입보다 작은 byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행합니다.

따라서  byte 변수 x, y 가 피연산자여도 결과를 저장할때에는 int 변수에 저장해야 합니다.

 

오류 예시)

package sec02.exam;

public class Example06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte x = 10;
		byte y = 20;
		byte result = x+y; //컴파일 오류
		System.out.println(result);
	}

}

 

정답 예시)

package sec02.exam;

public class Example06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte x = 10;
		byte y = 20;
		int result = x+y;
		
		System.out.println(result);
	}

}

 

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

-두 피연산자가 동일한 타입이라면 해당 타입으로 연산됩니다.

- int타입의 피연산자가 하나라도 있으면 double 타입으로 자동 변환되어 연산을 수행합니다.

package sec02.exam;

public class Example07 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int intValue = 10;
		double doubleValue = 1.1;
		double result = intValue + doubleValue;
		System.out.println(result);
	}

}

 

다른 예시) 값이 double 타입으로 나올때

package sec02.exam;

public class Examle08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x = 1;
		int y = 2;
		double result = x / y;
		System.out.println(result);
		
		int x2 = 1;
		int y2 = 2;
		double result2 = (double) x2 / y2;
		System.out.println(result2);
	}

}

결과

 

 

&  + 연산에서의 문자열 자동 타입 변환

- 피연산자중 하나가 문자열이면 나머지 피연산자도 문자열로 자동 변환됩니다.

package sec02.exam;

public class Example09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "5" + 7;
		String str2 = "5" + "7";
		
		System.out.println(str + ", " + str2);
	}

}

결과

 

 

 

& 문자열 강제 타입 변환

- 문자열을 기본타입으로 변환하는 방법 입니다.

package sec02.exam;

public class Example10 {

	public static void main(String[] args) {
		String str = "10";
		byte value = Byte.parseByte(str);
		System.out.println(value);
		
		String str2 = "100";
		int value2 = Integer.parseInt(str2);
		System.out.println(value2);
		
		String str3 = "1000";
		long value3 = Long.parseLong(str3);
		System.out.println(value3);
	}

}

결과

 

4. 변수와 시스템 입출력

& printf() 메소드

- printf() 메소드는 개발자가 원하는  문자열(형식화)을 출력합니다.

package sec02.exam;

public class Example11 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int value =123;
		System.out.printf("%d\n", value); //정수
		System.out.printf("%6d\n", value); //6자리정수,왼쪽 빈자리는 공백
		System.out.printf("%06d\n", value); //6자리정수, 왼쪽 빈자리는 0
		System.out.printf("%-6d\n", value); //6자리정수, 오른쪽 빈자리 공백
	}

}

 

 

& System.in.read()

- 키보드에서 입력된 내용을 변수에 저장하기 위해 System.in.read()를 사용하면 됩니다.

- System.in.read()의 단점으로 키코드를 하나씩 읽으므로 조합된 한글인 경우 읽을수 없습니다.

 

주의 할점)

아래에 a를 치고 enter를 누르면 a의 키코드인 97이 세번줄력이 될것이라 생각하지만

a 한번 그리고 enter키에 대한 키코드 CR:13 과 LF:10 2개가 입력됩니다.

package sec02.exam;

public class Example12 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int keyCode;
		keyCode = System.in.read();
		System.out.println(keyCode);
		
		keyCode = System.in.read();
		System.out.println(keyCode);
		
		keyCode = System.in.read();
		System.out.println(keyCode);
	}

}

 

결과

 

 

& Scanner 클래스

- 위의 System.in.read()의 단점을 보완하기 위해 사용합니다.

- 사용하기 위해  import문인 import java.util.Scanner;를 넣어줘야합니다.

package sec02.exam;

import java.util.Scanner;

public class Example13 {
	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		String inputData;
		
		while(true) {
			inputData = scanner.nextLine();
			System.out.println("입력된 문자열: \"" + inputData + "\"");
		}

	}

}

결과