Primitive 타입
흔히 기본형 타입으로 int, float, double, char, boolean 등의 타입이 해당됩니다. 기본형 타입의 변수는 값을 직접 가지고 있으며, 스택(Stack) 메모리에 저장됩니다. 이러한 변수들은 크기가 작기 때문에, 빠른 엑세스와 빠른 메모리 할당을 허용합니다. 예를 들어 int, float, double, char, boolean 은 고정된 크기에 공간을 차지하며, 변수에 값을 할당하면 해당 공간에 값을 직접 저장합니다. 메모리 할당과 해제가 빠르며 오버헤드가 적습니다.
Reference 타입
참조 타입으로 객체, 배열 등이 해당됩니다. 참조형 타입의 변수는 해당 데이터의 주소를 저장하고 있으며, 그 주소는 스택(Stack) 영역에 저장되고 있습니다. 참조 타입 변수는 실제 데이터가 저장된 힙(Heap) 메모리의 주소를 가리키는 역할을 합니다.
-> 쉽게 변수 자체는 스택 메모리에 저장되지만, 실제 데이터는 힙 메모리에 동적으로 할당 된다고 생각하면 됩니다.
예를 들어, 클래스 인스턴스나 배열은 참조 타입으로, 변수에는 해당 데이터가 위치한 힙 메모리 주소가 저장됩니다. 변수가 참조하는 실제 데이터는 객체나 배열이므로, 이 데이터들은 힙 메모리에 할당됩니다. 이로 인해 데이터 크기가 크거나 동적으로 변하는 경우에도 유연한 할당이 가능합니다.
기본형 타입과 참조 타입의 차이점은 변수가 실제 값을 가지고 있느냐, 아니면 값의 위치를 가리키느냐입니다. 기본 타입은 값을 직접 포함하므로 스택 메모리에 할당되며, 참조 타입은 값의 위치를 가리키므로 변수는 스택 메모리에 할당되지만, 데이터는 힙 메모리에 할당됩니다.
스택 프레임, 스택 영역 그리고 힙영역의 차이
- 스택 프레임
스택 프레임은 함수 호출 시 생성되는 작은 메모리 블록으로, 함수의 매개변수, 지역변수, 반환 주소 등의 정보를 저장하는 공간입니다. 함수가 호출 될 때마다 스택 프레임이 생성되고, 함수 실행이 끝나면 스택 프레임은 제거됩니다. 스택 프레임은 호출된 함수들이 중첩되어 실행될 때 호출 순서에 따라 스택에 쌓이고 제거됩니다. 스택 프레임은 호출된 함수의 실행 컨텍스트를 유지하고 관리하는데 사용됩니다.
- 스택 영역
스택 영역은 프로그램 메모리의 한 부분으로, 스택 프레임들이 쌓이고 관리되는 공간입니다. 스택 영역은 주로 지역 변수와 함수 호출 등과 관련된 데이터를 저장합니다. 스택 영역은 후입선출(LIFO) 방식으로 데이터를 저장하고 관리합니다. 스택 메모리는 일반적으로 상대적으로 작은 크기를 가지며, 스택 오버플로우를 방지하기 위해서 주의가 필요합니다.
- 힙 영역
힙 영역은 동적으로 할당되는 데이터를 저장하기 위한 영역입니다. 힙 영역은 프로그램 실행 중에 메모리 할당과 해제를 수행하는 데 사용됩니다. 힙 영역에 할당되는 데이터는 프로그래머가 직접 관리하며, 필요한 만큼 메모리를 동적으로 할당하거나 해제(자바의 경우 Garbage Collector 가 메모리 해제를 수행한다)할 수 있습니다. 힙 영역의 할당된 데이터는 프로그램의 생명주기 동안 유지될 수 있으며 메모리가 해제되지 않는다면, 계속 남아있게 됩니다.
'언어 > Java' 카테고리의 다른 글
equals() 와 hashCode() (0) | 2023.08.18 |
---|