항해99 Pre-onboarding 1주차 항해일지 <5day - TIL>
📌 객체(object)의 번지를 참조하는 타입으로 배열,열거,클래스,인터페이스를 뜻함
✔ 자바의 기본형과 참조형
Java Data Type
✏️ Primitive Type
ㄴ Boolean Type(boolean)
ㄴ Numeric Type
ㄴ Integral Type
ㄴ Integer Type(short, int, long)
ㄴ Floating Point Type(float, double)
ㄴ Character Type(char)
✏️ Reference Type
ㄴ Class Type
ㄴ Interface Type
ㄴ Array Type
ㄴ Enum Type
ㄴ etc.
👉 기본형의 특징
자바에서 기본 자료형은 반드시 사용하기 전에 선언되어야함
OS에 따라 자료형의 길이가 변하지 않음
비객체 타입으로 따라서 null 값을 가질 수 없음.
기본형 변수에는 리터럴, 실제값이 저장되지만 참조형 변수에는 실제 값이 아닌 주소값을 저장한다.
번지를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 부른다.
ex) Class Type, Interface Type, Array Type, Enum Type 등
*) 차이를 알기 위해서는 먼저 간단히 메모리 구조를 알아야한다.
간단하게 3개의 영역으로 나누면 위와 같고, 이 구조에서보는 기본형과 참조형 변수의 차이는,
⬛ 기본형 변수는 실제의 값이 저장되는데, 변수 선언시 Stack영역에 선언한 변수 만큼의 공간이 생성되며 그 공간안에 값이 들어간다
🟥 참조형 변수는 기본형 변수처럼 Stack 영역에 변수의 이름을 가진 공간이 생성되고, new라는 명령어가 Heap 영역에 새로운 공간을 생성한다.
🟥 공간의 크기는 넣으려는 값만큼, 그리고 할당받은 메모리 주소값을 Stack영역에 생성된 변수라는 장소에 저장한다.
🟨 요약)
기본형 변수는 Stack영역에서 실제값을 그대로 저장
참조형 변수는 Stack영역에 공간을 생성하고, Heap영역에도 공간을 생성하여 실제값을 저장한다음 그 공간의 주소값을 Stack영역에 저장한다.
💡 Class Loader
💡 Execution Engine
💡 Garbage Collector
📍JVM의 메모리 영역
*) Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역
1️⃣ Method Area
2️⃣ Heap Area
3️⃣ JVM Stack
4️⃣ PC register, Native method stack
📎 참조 변수의 ==, != 연산
📎 null과 NullpointerException
📎 String 타입
#문자열 생성문
String name1 = new String("신용권");
String name1 = "신용권";
*) 동일한 문자인 리터럴로 String객체를 생성했을 경우 ==의 결과는 true가 나오지만, new 연산자로 String 객체를 생성했을 경우 ==연산의 결과는 flase가 나오게 됨
🔍 참조를 잃은 String 객체는 ?