메모리 구조
자바의 메모리 영역은 용도에 따라 다른 공간을 사용한다.

1. Static
- 전역 변수와 static 멤버 변수를 저장한다.
- 프로그램이 시작할 때부터 끝날 때까지 메모리에 남아 있는다.
- 메인 메소드 실행 전 java.lang 패키지, import한 패키지, 프로그램 상의 클래스들을 이 영역에 배치한다.
2. Stack
- 기본 자료형으로 선언된 지역변수의 데이터 값이 저장되는 공간이다.
- 실행될 때 메모리가 할당되고 종료되면 없어진다.
3. Heap
- 프로그램 실행 중 생성된 객체(또는 인스턴스)가 저장되는 공간이다.
- heap 영역 내의 객체들은 다른 객체의 메소드나 stack 영역에서도 참조할 수 있다.
- 사용이 오래되거나 참조하는 변수가 없어지면 객체가 필요없는 것으로 간주하고 가비지 콜렉터가 메모리 할당을 해제한다.
변수
메모리에 값을 기록하기 위한 공간을 말한다.
변수는 아래와 같이 선언한다.
자료형 변수명;
변수를 선언만 하면 어떤 값이 들어가 있는지 알 수 없다.
따라서 변수에 값을 넣어줘야 하는데 이를 초기화라고 한다.
변수명 = 값;
선언과 초기화는 동시에 진행 가능하다.
자료형 변수명 = 값;
ex) int a = 5;
- int : 변수의 자료형(data type)
- a : 변수명
- 5 : 변수의 정해진 값, 리터럴(literal)
일반 변수
일반 변수는 선언한 변수에 값을 직접 저장하는 것이다.
일반 변수의 선언과 초기화는 아래와 같다.
int total = 50;
double height = 170.0;
char alpa = 'a';
ex) 자료형이 정수형이고 변수명이 total인 변수에 50 할당
아래와 같이 stack 메모리에 할당된다.

참조 변수
참조 변수는 객체의 주소를 저장한다.
참조 변수의 생성과 초기화는 아래와 같다.
Test a;
Test a = new Test();
- new 연산자를 사용해 변수를 초기화
- 참조 변수는 주소를 가지고 있다.
- 컴파일 시점엔 참조 변수의 크기를 알 수 없고, new 연산자를 만나면 메모리에 할당받게 된다.

Test a;
변수를 선언만 할 경우 메모리 공간

Test a = new Test();
Test의 인스턴스가 생성이 되고 변수 a는 Test 인스턴스의 주소를 가르킨다.
a 변수는 값이 저장되는 것이 아니고 heap 메모리에 있는 값을 참조하는 참조 변수이다.
a = new Test();
또 있을 경우

새롭게 생성된 인스턴스의 주소를 할당 받는다.
기존에 참조하던 인스턴스는 더 이상 연결할 수 없게 된다.
'JAVA' 카테고리의 다른 글
| 왜 우리는 JVM을 공부해야 하는가: JRE, JDK (1) | 2026.04.04 |
|---|---|
| [UML] 클래스 다이어그램 (0) | 2024.07.14 |
| 객체 지향 프로그래밍 4요소 - 다형성(Polymorphism) (0) | 2024.06.30 |
| 객체와 클래스 (0) | 2024.06.23 |
| JAVA에 대하여 (2) | 2024.06.16 |