Java 01. 다차원 배열
배열이란?
배열은 동일한 타입의 데이터를 연속적으로 저장한 자료구조입니다. 배열의 특징은 '정적'이며 '연속적'이라는 거에요. 처음 배열의 크기를 정하면 변경할 수 없고, 메모리 상에서 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.
배열의 생성
배열은 동일한 타입의 데이터를 연속적으로 저장한 자료구조입니다. 배열의 특징은 '정적'이며 '연속적'이라는 거에요. 처음 배열의 크기를 정하면 변경할 수 없고, 메모리 상에서 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.
int[] a = new int[5];
배열을 만들 때는 키워드 new를 사용합니다. 크기가 5인 Array 객체를 Reference type 변수 a에 저장하라는 의미에요. 이때 Array 객체는 Heap 메모리에서 생성될 겁니다.
다차원 배열과 메모리

컴퓨터의 메모리를 시각화하여 설명하면 각 cell은 데이터를 저장할 수 있는 하나의 공간이며, cell은 주소를 지니고 있습니다. 컴퓨터는 Random으로 메모리 공간에 데이터를 할당하죠.

컴퓨터 메모리는 1차원 구조이기 때문에 다차원 배열의 형식으로 데이터를 저장하지 못하며 순서대로 1차원 구조로 저장됩니다. 다시 말해, 2차원 배열이 연속적인 메모리를 할당한 정적 자료구조가 아닌 값을 저장하는 1차원 배열들과 각 1차원 배열을 참조하는 배열로 이루어집니다.

JVM 메모리 구조
Java Virtual Machine (JVM)은 OS (운영체제)에서 할당받은 메모리 영역을 세부적으로 구분해 사용합니다.
메소드 영역 (method)
모든 스레드가 공유하며 JVM이 시작할 때 생성됩니다. Class 별로 method code, constructor code, constant, static field 등을 분류해 저장합니다.
힙 영역 (heap)
객체와 배열이 생성되는 영역입니다. 힙에서 생성된 객체나 배열은 Stack 영역의 변수나 다른 객체 필드에서 참조합니다. 만약 참조하는 필드나 변수가 없다면? 가비지 컬렉터를 실행해 의미 없는 객체는 자동 제거되죠. 그리고 new 키워드는 heap 영역에 새로운 객체를 생성하는 역할을 합니다.
스택 영역 (stack)
메소드 호출할 때 프레임을 push (추가)하고 메소드가 종료되면 프레임을 pop (제거)하며 동작합니다. 기본적으로 코드를 작성하는 부분은 스택영역, 스택 영역에서 작성한 참조 변수가 참조하는 객체 (주소)는 힙 영역에 존재한다고 이해하면 될 것 같습니다.
정리
그동안 가비지 컬렉터가 척척 메모리 할당과 정리를 해주니 자바의 내부구조를 자세히 궁금해하지 않았던 것 같습니다. Java의 메모리 할당 방법부터 배열을 이해하기 전 짚어야 하는 stack, heap에 관한 JVM의 메모리 구조, 그리고 레퍼런스 타입의 지식 또한 중요하지 않을까 해서 정리를 해보았습니다.