01. 화면의 글자 출력
- System.out.print("Hello"); : 기본출력(출력 후 줄바꿈X)
- System.out.println("Hello"); : 기본출력(출력 후 줄바꿈)
- syso 입력 후 Ctrl + Space를 누르면 자동 완성
- 실수의 자리수 조절 불가
- 10진수로만 출력된다
- System.out.printf("출력서식",출력할내용); : 형식출력(형식을 지정, 줄바꿈X)
- 출력 서식 : %[-][0][n][.m]지시자
- [] 는 생략 가능
- n : 출력할 전체 자리수 지정(오른쪽 정렬), %3d (전체 자리수가 3인 정수)
- 0 : 전체 자리수가 지정된 경우 왼쪽의 남는 자리에 0을 출력, %03d
- - : 전체 자리수가 지정된 경우 왼쪽 정렬하고 빈칸에 공백 출력
- .m : 소수점 아래 자리수 지정, 잘리는 소수점 자리수는 반올림 시켜서 표시, 3.2f
- 지시자
- %b : boolean 형식으로 출력
- %d : 정수 형식으로 출력
- %o : 8진수 정수의 형식으로 출력
- % x or %X : 16진수 정수의 형식으로 출력
- %f : 소수점 형식으로 출력
- %c : 문자형식으로 출력
- %s : 문자열 형식으로 출력
- %n : 줄바꿈 가능
- %e or %E : 지수 표현식의 형식으로 출력
02. 화면에 입력받기(Scanner)
1. Scanner란?
- 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
2. Scanner를 사용하려면...
- import문 추가
- Scanner 객체의 생성
- Scanner scanner = new Scanner(System.in);
- Scanner 객체를 사용
- int num = scanner.nextInt(); // 화면에서 입력받은 정수를 num에 저장
- String input = scanner.nextLine(); // 화면에서 입력받은 내용을 input에 저장
- int num = Interger.parseInt(input); // 문자열 input을 숫자 num으로 변환
03. 변수(Variable)
1. 변수란?
- 변하는 수? X
- 하나의 값을 저장할 수 있는 메모리(RAM) 공간의 이름
2. 변수 선언
- 변수의 선언 이유
- 값(data)을 저장할 공간을 마련하기 위해서
- 변수의 선언 방법
- 변수타입 변수이름;
- int age; // 정수형(int) 변수 age 선언
1. 명명 규칙(Naming convention)
- 대소문자 구분되며 길이에 제한이 없다
- 예약어(Reseved word)를 사용해서는 안 된다
- true는 예약어라 사용할 수 없지만, True는 가능
- 숫자로 시작해서는 안된다
- top10은 허용하지만, 7up은 허용되지 않는다
- 특수문자는 '_', '$'만을 허용한다
- $harp은 허용되지만 S#arp는 허용되지 않는다
2. 명명 규칙(권장사항)
- 클래스 이름의 첫 글자는 항상 대문자로 한다
- 변수와 메서드 이름이 첫 글자는 항상 소문자로 한다
- 여러 단어 이름은 단어의 첫 글자를 대문자로 한다
- lastIndexOf, StringBuffer
- 상수의 이름은 대문자로 한다, 단어는 '_'로 구분한다
3. 변수에 값 저장하기
- 변수에 값 저장하기
- int age; // 정수 (int)타입의 변수 age를 선언
- age = 25; // 변수 age에 25를 저장
- int age = 25; // 위의 두 줄을 한 줄로 가능
- 변수의 초기화 - 변수에 처음으로 값을 저장하는 것(!주의, 지역 변수는 읽기전에 꼭 초기화해야 함)
- int x = 0; // 변수 x를 선언 후, 0으로 초기화
- int y = 5; // 변수 y를 선언 후, 5로 초기화
- int x = 0, y = 5; // 변수 타입이 동일시에 이렇게 한줄로 작성 가능
자료형 기본값
boolean false
char '\u0000'
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d or 0.0
참조형 null
4. 변수의 값 읽어오기
- 변수의 ㄱ밧이 필요한 곳에 변수의 이름을 적는다
- int year = 0, age = 14;
- year = age + 2000;
-> year = 14 + 2000;
-> year = 2014;
- age = age + 1;
-> age = 14 + 1;
-> age = 15;
- System.out.println(age);
-> 15 출력
3. 변수의 타입
- 변수는 지정된 변수 타입에 맞는 값을 저장할 수 있다.
- 변수의 타입은 저장할 값의 타입에 의해 결정
- 저장할 값의 타입과 일치하는 타입으로 변수를 선언
1. 값의 타입
- 값 (Immutable Type, 변하지 않는 값)
- 문자 - char
- 숫자
- 정수 - byte, shor, int, long
- 실수 - flat. double
- 논리 - boolean (true, false)
2. 기본형과 참조형
- 기본형(Premitive type)
- 8개 (boolean, char, byte, short, int, long, float, double)
- 실제 값을 저장
- 참조형(Reference type)
- 기본형을 제외한 나머지(String, System 등)
- 객체의 주소를 저장 (4byte, 0X00000000 ~ 0xffffffff)(!, 64bit JVM경우 8byte)
1. 기본형(Primitive type)
- 논리형 : true & flase 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용
- 문자형 : 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다
- 정수형 : 정수 값을 저장하는데 사용된다, 주로 사용하는 것은 int와 long이며, byte는 이진데이터를 다루는데 사용되며, short는 c언어와 호환을 위해 추가되었다
- 실수형 : 실수 값을 저장하는데 사용된다, float와 double이 있다
종류/크기 1byte 2byte 4byte 8byte
논리형 boolean
문자형 char
정수형 byte short int long
실수형 float double
2. 변수, 상수, 리터럴
- 변수(variable) : 하나의 값을 저장하기 위한 공간, 변경 O
- int score = 100;
- score = 200;
- 상수(contant) : 한 번만 값을 저장 가능한 변수, 변경 X (상수의 이름은 대문자로 작성)
- final int MAX = 100;
- MAX = 200; // Constant Error, 값 변경이 불가
- 리터럴(literal) : 그 자체로 값을 의미하는 것, 기존의 상수
4. 리터럴의 접두사와 접미사
종류 리터럴 접미사(대소문자 구별안함)
논리형 false,true X
정수형 123, 0b0101, 077, 0xFF, 100L L(long type)
실수형 3.14, 3.0e8, 1.4f, 0X1.0p-1 f(float type), d(double type, 생략가능)
문자형 'A', '1', '\n' X
문자열 "ABC", "123", "A", "true" X
- boolean power = true; // or false
- char = ch = 'A'; // ' '홑 따옴표로 묶어줘야 한다
- String str = "ABC"; // " " 곁 따옴표로 묶어준다
- byte b = 127; // max value ~ 127
- int i = 100; // 10진수
- int bin 0b0101; // 2진수
- int oct = 0100; // 8진수
- int hex = 0x100; // 16진수
- long l = 10_000_000_000L; // 100억, int의 max value는 20억
- long l = 100; // OK, int 범위이면 L 생략 가능
- flat f = 3.14f; // float일 경우 f를 접미사로 붙여줘야 한다
- double d = 3.14; // java는 실수형을 기본적으로 double타입이기 때문에 d 생략 가능
- -> 10.0
- .10 -> 0.10
- 10f -> 10.0f
- 1e3 -> 1000.0 // e는 10의 제곱
5. 변수와 리터럴의 타입 불일치
- 범위가 '변수 > 리터럴'인 경우, OK
- int i = 'A' ; // int > char
- long l = 123; // long > int
- double d = 3.14f ; // double > float
- 범위가 '변수 < 리터럴'인 경우, 에러
- int i = 30_0000_0000; // int의 범위 +- 20억 벗어남
- long l = 3.14f; // long < float, 실수형은 표현 범위가 더 넓어서 에러가 남
- float f = 3.14; // float < double
- byte, short 변수에 int 리터럴 저장 가능(정수의 Overflow, 변수의 타입의 범위 이내어야 함)
- byte b = 100; // OK, byte의 범위(-128 ~ 127)에 속함
- byte b = 128; // ERROR, byte의 범위를 벗어남
6. 형변환(Casting)
- 값의 타입을 다른 타입으로 변환하는 것
- boolean을 제외한 7개의 기본형은 서로 형변환이 가능
- float f = 1.6f;
- int i = (int)f;
변환 수식 결과
int -> char (char)65 'A'
char -> int (int)'A' 65
float -> int (int)1.6f 1
int -> float (float)10 10.0f
04. 문자와 문자열
- 문자
- char ch = 'A';
- char ch = 'AB'; // Error, 문자는 한개의 문자만 저장 가능
- 문자열
- String s = "ABC"; // 문자열은 " " 쌍따옴표 사용
- String s1 = "AB";
- String s2 = new String("AB"); // String 클래스를 사용하여 값 대입
- 번외
- String s = "A"; // 문자 하나만 저장도 가능
- String s ""; // empty String
- char ch = ''; // ERROR;
- 문자열 결합(왼쪽에서부터 오른쪽으로 진행하기에 순서에 따라 결과가 달라진다)
- String s1 = "A" + "B"; // "AB"
- String s1 = "" + 7; //"7"
- String s1 = "" + 7 + 7; -> "" + "7" + 7 -> "7" + "7" -> "77"
- String s1 = 7 + 7 + ""; -> 14 + "" -> "14"
- 문자열 + any type -> 문자열
- any type + 문자열 -> 문자열
05. 두 변수의 값 교환하기
- int x = 10, y = 20;
- x = y; // y의 값을 x에 저장
- y = x; // x의 값을 y에 저장
-> x = 20, y = 20 // 값을 서로 교환하기 위해서는 y의 값 또는 x의 값을 보존할 변수가 필요하다
- int x = 10, y = 20, tmp;
- tmp = x;
- x = y;
- y = tmp;
-> x = 20, y = 10