Java

[Java] 자바의 메모리 구조

SN.Flower 2023. 9. 21.


자바의 자료형은 크게 '기본 자료형'과 '참조 자료형'으로 나눌 수 있다.

이 중 자바의 기본 자료형은 boolean, byte, short, int, long, float, double, char로 총 8가지로 이루어져있다. 참조 자료형은 배열, 클래스, 인터페이스등으로 나뉘는데, 개발자가 직접 정의할 수도 있으므로 가짓수가 무한개이다.

자료형을 이렇게 구분해야 하는 이유는 기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문이다. 그리고 자료형의 구분을 이해하려면 먼저 자바의 메모리의 구조를 알아야한다.

개인적으로 메모리의 구조를 제대로 알고있을 때 정적 변수, 메서드, 클래스, 인터페이스, 오버라이딩등에 대해서 배울 때좀 더 쉽게 이해할 수 있었다. 따라서 자료형에 대해 공부할 때 메모리 구조를 기반으로 생각하며 어떻게 데이터가 초기화되고 수정되는지 알면 좋을 것이라 생각한다.

 

자바의 메모리 구조

 

자바의 메모리는 목적에 따라 크게 3가지 영역으로 나뉜다. 첫번째 영역은 클래스(class) 영역, 정적(static) 영역, 상수(final) 영역, 메서드(method) 영역이라는 4개의 이름으로 불린다. 두번째 영역은 스택(stack) 영역으로, 변수들이 저장되는 공간이다. 마지막 영역은 힙(heap) 영역으로, 객체들이 저장되는 공간이다. 실제 메모리는 레지스터(register) 영역을 포함한 4개 영역이지만, 개발자의 관점에서는 3개의 영역만 고려하면 된다.

 

 

자바의 메모리 구조를 기반으로 기본 자료형과 참조 자료형의 차이점에 대해 알아보자.

두 자료형의 차이점으로는 실제 데이터값의 저장 위치가 다르다는 것이 있다. 두 자료형 모두 변수의 공간이 스택 메모리에 생성되지만, 그 공간에 저장되는 값의 의미가 서로 다르다. 기본 자료형은 스택 메모리에 생성된 공간에 실제 변숫값을 저장하는 반면, 참조 자료형은 실제 데이터값은 힙 메모리에 저장하고, 스택 메모리의 변수 공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값을 저장한다.

 

기본 자료형과 참조 자료형의 실제 데이터값 저장 위치 비교

 

위 그림을 통해 예시를 들어보자면, 기본 자료형에 속하는 int 자료형으로 선언된 변수 a는 공간이 스택 메모리에 만들어지고, 이 공간 안에 실제 데이터값인 1이 저장된다. 반면에, 참조 자료형인 String으로 선언된 변수 b에서는 실제 데이터값인 "Hello"는 힙 메모리에 저장하고, 스택 메모리에 있는 b의 공간에는 힙 메모리에 있는 실제 데이터값의 위치가 저장된다. 이 때, 자바는 힙 메모리에 직접 접근할 수 없으므로 반드시 위칫값을 저장하고 있는 참조 변수 b가 필요하다.

 


 

Reference

  • 자바 완전 정복 | 김동형 지음

댓글