JAVA

자바의 변수들(일반 변수, 참조 변수)

최서은 2024. 6. 23. 19:48

메모리 구조

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

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