하나의 값을 저장할 수 있는 메모리 공간(RAM)
지역 변수는 읽기 전에 꼭 초기화(변수를 사용하기 전에 처음으로 값을 저장하는 것)를 해야 한다.
클래스변수와 인스턴스변수는 초기화를 생략할 수 있다.
“변수의 이름처럼 프로그래밍에서 사용하는 모든 이름을 식별자(identifier)라고 한다.”
클래스 이름의 첫 글자는 항상 대문자로 한다.
여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
lastIndexOf(클래스이름이 아니라는 것을 추측),StringBuffer(클래스이름이라는 것을 추축)
상수의 이름은 대문자로 하며 단어는 ‘_’로 구분한다.
PI, MAX_NUMBER
자료형은기본형(Primitive type)과 참조형(Reference type) 두 가지로 나눌 수 있다.
기본형의 종류를 얘기할 때는 ‘자료형(data type)’이라는 용어를 쓰고, 참조형 변수의 종류를 구분할 떄는 ‘타입(type)’이라는 용어를 사용한다.

| 종류\크기 | 1byte | 2byte | 3byte | 4byte |
|---|---|---|---|---|
| 논리형 | boolean | |||
| 문자형 | char | |||
| 정수형 | byte | short | int | long |
| 실수형 | float | double |
리터럴의 타입과 접미사
값이 출력될때 접미사는 출력되지 않는다.
| 종류 | 리터럴 | 접미사 |
|---|---|---|
| 논리형 | false, true | 없음 |
| 정수형 | 123, 0b0101 | L |
| 실수형 | 3.14, 3.0e8 | f, d |
| 문자형 | ‘A’, ‘1’ | 없음 |
| 문자열 | “ABC”, “123” | 없음 |
변수와 리터럴의 타입 불일치
범위가 “변수(그릇) > 리터럴(물건)” 인 경우 → OK
범위가 “변수(그릇) < 리터럴(물건)” 인 경우 → ERR
byte, short 변수에 int리터럴 저장가능
단, 변수의 타입의 범위 이내어야 함.
문자 리터럴 → ‘A’
빈 문자는 허용되지 않는다.
문자열 리터럴 → “A”
빈 문자도 허용이 된다.
printf()는 ‘지시자(specifier)’를 통해 변수의 값을 여러가지 형식으로 변환하여 출력하는 기능을 가지고 있다.
‘지시자’는 값을 어떻게 출력할 것인지를 지정해주는 역할을 한다.
printf()의 지시자는 JavaAPI → Formatter에서 찾아 볼 수 있다.
출력형식 지정불가
실수의 자리수 조절불가
10진수로만 출력
System.out.println(10/3) // 3
System.out.println(10.0/3) // 3.33333
Scanner란?
화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
Scanner를 사용하려면
2진법: 0~1
8진법: 0~7
10진법: 0~9
16진법: 0~F
컴퓨터는 2진 체계로 설계되어 2진수(0과1)밖에 모른다.
한 자리의 2진수를 ‘비트(bit, binary digit)’라고 하며, 1비트는 컴퓨터가 값을 저장할 수 있는 최소 단위이다.
그러나 1비트는 너무 작은 단위이기 대문에 1비트 8개를 묶어서 ‘바이트(byte)’라는 단위로 정의해서 데이터의 기본 단위로 사용한다.
워드(word)는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미한다.
워드의 크기는 CPU의 성능에 따라 달라진다. ex) 32bit CPU → 1word === 32bit, 64bit CPU → 1word === 64bit

*nibble: 4bit, 16진수 1자리를 저장할 수 있는 단위
*0001과 1은 같은 값이지만, 0001의 크기가 4자리인 데이터라는 것을 강조하기 위해 빈자리를 0으로 채운것
n비트로 2^n개의 값을 표현할 수 있다.
n비트로 10진수를 표현한다면, 표현가능한 10진수의 범위는 0~2^n - 1이 된다.
0과1만 사용하는 2진법은 자리수가 길어진다는 단점을 보안하기 위해 8진법, 16진법을 사용한다.
8진수는 2진수 3자리를, 16진수는 2진수 4자리를 각각 한자리로 표현할 수 있기 때문에 자리수가 짧아져서 알아보기 쉽고 서로 간의 변환방법 또한 매우 간단하다.
char ch = 'A';
변수에 ‘문자’가 저장되는 것 같지만, 문자가 아닌 ‘문자의 유니코드(정수)’가 저장된다. 즉, ‘A’의 유니코드 65가 저장된다.
어떤 타입을 다른 타입으로 변환하는 것을 ‘캐스팅(Casting)’이라고 한다.
char타입의 크기는 2byte(=16bit)이다.
println()은 변수의 타입이 정수형이면 변수에 저장된 값을 10진수로 해석하여 출력하고, 문자형이면 저장된 숫자에 해당하는 유니코드를 출력한다.
인코딩과 디코딩(encoding & decoding)
문자를 코드로 변환하는 것을 ‘문자 인코딩’, 코드를 문자로 변환하는 것을 ‘문자 디코딩'이라고 한다.
문자를 저장할 때는 인코딩을 해서 숫자로 변환해서 저장하고, 저장된 문자를 읽어올 때는 디코딩을해서 숫자를 원래의 문자로 되돌려야 한다.
byte(1) < short(2) < int(4)[default data type] < long(8)
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
int타입과 float타입의 값을 더하는 경우, 먼저 두 값을 같은 타입으로 즉, 둘 다 float타입으로 변환한 다음에 더해야 한다.
형변환하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주면된다
(타입)피연산자
여기에 사용되는 괄호()는 ‘캐스트 연산자' 또는 ‘형변환 연산자'라고 하며, 형변환을 ‘캐스팅'이라고도 한다.
double d = 85.4;
int score = (int)d; // double타입의 변수 d를 int타입으로 형변환
피연산자인 변수 d의 값은 형변환 후에도 아무런 변화가 없다.
기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다.
기본형과 참조형간의 형변환은 불가능하다.
큰 타입에서 작은 타입으로의 변환, ex) int → byte 으로 변환하는 경우는 크기의 차이만큼 잘려나간다.
그래서 경우에 따라 ‘값 손실(loss of data)’이 발생할 수 있다.