기본형 타입과 참조형 타입
1. 기본형(primitive type) : 실제 값을 저장함, null을 가질 수 없음
2 참조형(reference type) : 객체 주소를 저장함, null 가질 수 있음
기본형 타입의 종류와 특징
기본형 타입(primitive type)
- 논리(boolean), 문자(char), 정수(long, int, byte, short) 실수(float, double)
특징
- 객체가 아니기 때문에 null을 가질 수 없다.
- 메모리의 스택(stack)에 저장된다.
- 메모리에는 실제 값이 있다.
참조형 타입(reference type)
- 배열 타입, enum 타입, class, interface
특징
- 객체며 null을 가질 수 있다.
- 실제 값은 다른 곳이 있고, 그 값이 있는 주소를 참조해서 그 값을 가져온다.
- 메모리의 힙(heap)에 실제 값을 저장, 그 참조값(주소값)은 스택(stack)에 저장
그래서 이 둘의 차이는 ?
참조 자료형과 기본 자료형의 차이
- 초기화
- 기본 자료형 : 값을 주며 바로 초기화
- 참조 자료형 : new 키워드 이용하여 객체 생성 필요
- 전달되는 매개 변수 차이 (모두 값을 전달하지만 어떤 값을 전달하냐 차이가 있음)
- 기본 자료형 : 실제 값을 전달함 (stack 내 값)
- 참조 자료헝 : 참조 주소를 전달함 (stack 내 주소) -> 이후 참조해서 가져옴
- 기본 자료형의 경우 null 허용하지 않지만 참조 자료형은 이를 허용한다.
변수의 4가지 타입
- 지역 변수 : 중괄호 안에 선언된 변수 (stack 영역)
- 매개 변수 : 메소드에 넘겨주는 변수
- 인스턴스 변수 : 메소드 외부, 클래스 내부에 선언된 변수, 앞에 static 예약어가 없음 (heap 영역)
- 클래스 변수 : 인스턴스 변수 중에 static 예약어를 붙인 변수 (method 영역)
변수의 유효 범위
- 지역 변수 : 지역 변수를 선언한 중괄호 내에서만 유효
- 매개 변수 : 메소드가 호출될 때 생명이 시작되고 메소드가 끝나면 소멸
- 인스턴스 변수 : 객체가 생성될 때 시작되고, 그 객체를 참조하고 있는 다른 개체가 없으면 소멸
- 클래스 변수 : 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다.
클래스가 언제 호출될까 ?
- class Loader에 의해 클래스 파일을 메모리에 load하고 JVM에 의해 메모리 할당되었을 때
- 읽어보면 좋을 링크 : 클래스는 언제 메모리에 로딩 & 초기화 되는가
더보기
chatGPT
In Java, when a class is loaded for the first time, its life cycle begins. The life cycle of a class refers to the sequence of events that occur from the time the class is loaded into the Java Virtual Machine (JVM) until it is unloaded.
When a class is first called, the following sequence of events occur:
- The class loader loads the class file into memory.
- The JVM allocates memory for the class and initializes its static variables.
- The JVM invokes the static block of the class, if it has one.
- The class is now ready to be used and its methods can be called.
After the class has been loaded, it can be used multiple times during the execution of a Java program. However, the life cycle of the class ends when it is no longer needed or when the program terminates, and the memory allocated for the class is freed by the JVM.
- 클래스가 처음 load 되면 해당 클래스의 생명 주기가 시작됩니다.
- 클래스의 수명주기는 클래스가 JVM에 load 될 때부터
unload 될 때까지의 이벤트들이며 그 순은 다음과 같습니다.
- class loader가 클래스 파일을 메모리에 올립니다. (load)
- JVM은 클래스에 메모리를 할당하고 static 변수들을 초기화 합니다.
- JVM은 클래스 내의 static block이 있는 경우 호출합니다.
- class는 이제 method를 호출할 수 있도록 준비가 완료되었습니다.
- load된 클래스는 여러 번 사용할 수 있습니다. 그러나 더 이상 클래스가 필요하지 않거나 프로그램 종료 시에 클래스의 생명 주기는 끝이 나며 이후 할당된 메모리는 JVM에 의해 해제됩니다.