number
string
object
1. 배열
2. JS객체 ({K:V,K:V...})
function
boolean
undefined
+ null
프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록 되어야 함

뇌의 역할 (기억 못함) 연산만 가능
주기억장치
기억을 담당하는 부분
cpu와 붙어있음
RAM에 있는 애들만 cpu가 읽어서 연산 가능
RAM에는 프로그램 실행시 사용할 값 들어있음
휘발성 메모리
메모리 저장
code나 data를 RAM에 올려두어야 cpu가 계산
변수에 애국가 넣어놓고 RAM에 변수를 저장해서 기록하고 꺼내씀
HDD SSD

변수를 사용하지 않았을 때
System.out.println(2 * 3.141592653589793 * 5);
System.out.println(3.141592653589793 * 5 * 5);
System.out.println(3.141592653589793 * 5 * 5 * 20);
System.out.println(4 * 3.141592653589793 * 5 * 5);
변수를 사용했을 때
System.out.println(2 * pi * r); // 원의 둘레
System.out.println(pi * r * r); // 원의 넓이
System.out.println(pi * r * r * h); // 원기둥의 부피
System.out.println(4 * pi * r * r); // 구의 겉넓이
결과값은 똑같음

저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준 필요
컴퓨터가 나타내는 데이터의 최소 저장 단위로서 2진수 값 하나를 저장할 수 있는 메모리공간을 의미
8bit 256가지 나타낼 수 있음
데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 구성됨
1바이트 = 8비트
=> 영어 숫자 표현
2바이트 = 16비트
=> 한글,한문 등등 쓸 수 있음
유니코드(Unicode) 2바이트 문자체계
메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

변수에 값을 집어 넣는 것


참 거짓을 나타냄 0과 1로 표현 가능
(cpu가 연산처리하는 최소 단위가 1byte 1비트만 필요하지만 할당은 1byte)
boolean booleanData;
메모리에 논리값(t/f)을 저장할 공간을 1byte 할당하고 할당된 공간을 booleanData 라고 부르겠다.
byte byteNumber = 127;
128 넣는 순간 에러
메모리에 정수 값을 저장할 공간을 1byte 할당하고 할당된 공간을 byteNumber라고 부르겠다.
선언된 byteNumber변수에 처음으로 127을 넣음.
--> 초기화 : 처음 변수에 값을 대입
short shortNumber = 32767;
short, byte는 옛날 코드 잔재
int intNumber = 2147483647;
int(기본형) 정수만 저장 가능 4바이트의 크기를 가짐 32비트
long longNumber = 10000000000L;
L 또는 l 안 붙였을 때
The literal 10000000000 of type int is out of range
-> 100억 이라는 값은 int의 범위를 벗어났다 21억 몇까지만 가능..
뒤에 L을 붙여줌으로써 long 자료형인 것을 나타냄.
float : 소수점 8자리
float floatNumber = 1.2345f;
F 또는 f 안 붙였을 때
Type mismatch: cannot convert from double to float
double 자료형이 기본형
double : 소수점 16자리
double doubleNumber = 3.141592;
double이 실수형 중에서 기본형
(리터럴 표기법이 없는 실수는 double로 인식)
d를 뒤에 쓸 수는 있다! -> 3.141592d;
char ch = 'A';
char ch2 = 66;
System.out.println("ch : " + ch);
System.out.println("ch2 : " + ch2);

문자형 리터럴 표기법 : ''(홑따옴표)
'B' 딱 한글자 들어오는 것
2바이트 '가' unicode 2바이트 문자 표기법 한글자
char 자료형에 숫자가 대입될 수 있는 이유
컴퓨터에는 문자표가 존재하고 있음
숫자에 따라 지정된 문자 모양이 매핑되고 'B' 문자 그대로 대입되면 변수에 숫자 66으로 변환되어 저장
-> 반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것이 가능함.
자료형 변수명 = 리터럴;
프로그래밍에서는 대입되는 이 데이터(값자체)를 리터럴 이라는 단어로도 표현
리터럴 : 변수에 대입되거나 작성되어지는 값 자체
(자료형에 따라 리터럴 표기법이 다름.)
int abcdefg123456789;
int abcdefG123456789; // G 다름
예약어를 사용하면 안 된다.

숫자로 시작하면 안된다.
특수문자는 '_'와 '$'만을 허용한다.
(하지만 쓰지 않음)
여러 단어 이름은 단어의 첫 글자를 대문자로 한다.
단, 첫 시작 글자는 소문자로 하는 것이 관례이다.(카멜 표기법)
char helloWorldAppleBananaTomato;
int 정수1번;
double 실수2번 = 3.14;
System.out.println(실수2번);

main 치고 ctrl space + enter
=> main method 자동완성
수학에서는 변하지 않는 값 의미
컴퓨터(Java)에서는 한 번만 저장(기록)할 수 있는 메모리 의미
모두 대문자, 여러 단어 작성 시 _ 사용
1) 변하면 안되는 고정된 값을 저장할 때
2) 특정한 값에 의미를 부여하는 경우

final double PI_VALUE = 3.14;
PI_VALUE = 2.3232323;
error 재대입 불가
값(Data)의 자료형을 바꾸는 것
(단, boolean 제외)
자동 형변환 값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산 시 컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환

자동 / 강제 형변환이 존재.
값의 범위가 큰 자료형과 값의 범위가 작은 자료형의 연산 시 컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환

int num1 = 10;
double num2 = 3.5;
System.out.println("자동 형변환 결과 : " + (num1 + num2));
원래 에러가 발생해야 하지만 "자동 형변환" 덕분에 발생하지 않음

int i1 = 3;
double d1 = i1;
System.out.println("i1 : " + i1);
System.out.println("d1 : " + d1);
double은 실수만 저장할 수 있는 자료형
정수가 대입되는 연산이 수행되면
자동으로 정수 -> 실수로 자동형변환

int -> long 형변환
int i2 = 2_100_000_000; // 21억 _천단위 구분기호 , 대신 사용
long l2 = 10_000_000_000L; // 100억
long result2 = i2 + l2;
System.out.println("result2 : " + result2);
int +long -> long + long = long 자동형변환

char -> int 형변환
char 자료형은 문자형이지만 실제 저장하는 값은 0 부터 6만 5천번 사이에 있는 숫자(정수형)
char ch3 = 'V';
int i3 = ch3;
System.out.println("i3 : " + i3);
char ch4 = '각';
int i4 = ch4;
System.out.println("i4 : " + i4);

값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환
강제 형변환 시 데이터 손실이 발생할 수 있음
-> 데이터의 변형, 손실을 감수하고 강제 변환

double temp = 3.14;
int num = (int)temp;
System.out.println("temp : " + temp);
System.out.println("num : " + num);
(int) 없을 때
Type mismatch: cannot convert from double to int

실수 -> 정수형 변환 시 소수점 버림 처리 (데이터 손실)
int -> byte 강제 형변환
int iNum = 290;
byte bNum = (byte)iNum; // Type
System.out.println(iNum);
System.out.println(bNum);
(byte) 없을 때
mismatch: cannot convert from int to byte

같은 정수형 끼리의 변환 시에도 값의 범위 차이 때문에 데이터 손실이 발생
char -> int 강제 형변환
char ch = 'A'; // 65
int iNum2 = ch; // 자동 형변환 이용
System.out.println(iNum2);
System.out.println((int)ch); 같은 뜻
결과값 65
int -> char 강제형변환
// 44085;
int iNum3 = 44085;
System.out.println((char)iNum3);
결과값 갵
오버플로우 현상은 컴퓨터가 미리 예측할 수가 없음(에러 안 뜸)
-> 개발자가 미리 예측해야함.
-128 ~ 127 127 + 1 = -128

int i6 = 2147483647; // int 의 최대값
int result6 = i6 + 1;
System.out.println(result6);
결과값 -2147483648 (맨 앞으로 돌아감)