변수(variable)
데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간
타입(data type)
해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할
자바의 자료형으로는 기본형(Primitive type) 과 참조형(Reference type) 이 있다


boolean
참과 거짓을 저장하는 타입
기본값은 false
기본 타입 중 가장 작은 크기인 1byte의 크기
char
C언어와 C++ : 아스키코드(ASCII) 사용하여 문자 표현
아스키코드는 문자 하나를 7비트로 표현 (총 128개 문자 표현)
Java : 유니코드(unicode) 사용하여 문자 표현
유니코드는 문자 하나를 16비트로 표현 (총 65,536개 문자 표현)
byte
주로 이진데이터를 다루는데 사용
short
C언어와의 호환을 위해 사용되는 타입 (잘 사용되지 않음)
int
정수 연산을 하기 위한 기본 타입
byte 혹은 short 의 변수가 연산을 하면 연산의 결과는 int형이 됨
long
수치가 큰 데이터를 다루는 프로그램에서 주로 사용
초기화 시 정수값 뒤에 알파벳 L을 붙여서 long 타입의 정수 데이터임을 알려주어야함 (만일 정수값이 int의 값의 저장 범위를 넘는 정수에서 L을 붙이지 않는다면 컴파일 에러가 발생)
float, double
실수를 가수와 지수 형식으로 저장하는 부동소수점 방식
가수 표현에 있어 double형이 float형보다 표현 가능 범위가 더 큼
자바에서 실수의 기본 타입 double형이므로 float형에는 알파벳 F를 붙여서 float 형임을 명시해주어야함
참조형 타입은 간단히 말하면 위의 8가지 기본형(primitive type)을 제외한 나머지 타입이다.
java.lang.Object 클래스를 상속하는 모든 클래스를 말한다
new로 인해 생성하는 것들은 메모리 영역인 Heap 영역에 생성되고, Garbage Collector가 돌면서 메모리를 해제한다
클래스 타입(class type), 인터페이스 타입(interface type), 배열 타입(array type), 열거 타입(enum type)이 있다
빈 객체를 의미하는 Null이 존재한다 (Null로 변수 초기화가 가능하다)
문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다
(Ex. 객체나 배열을 Null 값으로 받으면 NullPointException이 발생하므로 변수 값을 넣어야 한다)
Heap 메모리에 생성된 인스턴스는 메소드나 각종 인터페이스에서 접근하기 위해 JVM의 Stack 영역에 존재하는 Frame에 일종의 포인터(C의 포인터와는 다름)인 참조값을 가지고 있어 이를 통해 인스턴스를 핸들링한다
👉 쉽게 말하면
기본형과는 달리 실제값은 힙(heap)에 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장하고 나중에 그 주소를 참조해서 값을 가져온다.

