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 + "\"");
}
}
}
'학습단 > JAVA 학습단' 카테고리의 다른 글
1주차 완료 (0) | 2023.07.07 |
---|---|
5. 혼공자 5일차(참조 타입) (0) | 2023.07.07 |
4. 혼공자 4일차(조건문 + 반복문) (0) | 2023.07.06 |
3. 혼공자 3일차(연산자 + 연산식) (0) | 2023.07.05 |
1. 혼공자 1일차(자바란 + 세미콜론 + 주석) (0) | 2023.07.03 |