변수와 객체와 메모리의 관계

Gunju Kim·2025년 3월 19일
0

필수시청 영상

목록 보기
9/32
post-thumbnail

🔖 기본적인 개념 이해하기

자바에서 변수는 데이터를 담기 위한 공간의 이름이고,
객체는 클래스(Class)를 기반으로 메모리에 생성된 실제 데이터 덩어리입니다.

이 변수와 객체는 자바 메모리 구조의 서로 다른 위치에 저장됩니다.

📌 자바 메모리 구조 간단히 이해하기

자바 프로그램이 실행되면 메모리는 크게 두 가지 영역으로 나뉩니다.

Stack (스택) 영역
Heap (힙) 영역

🚩 변수와 객체가 메모리에 저장되는 방식

자바에서 변수가 저장되는 방식은 자료형에 따라 크게 두 가지로 나뉩니다.

1. 기본형(Primitive type) 변수
2. 참조형(Reference type) 변수 (객체를 참조하는 변수)

✅ 1) 기본형 변수의 저장 방식

기본형(int, char, boolean, double 등)은 스택(stack) 메모리 영역에 실제 값이 저장됩니다.

int a = 5;
double b = 3.14;

이 경우, 메모리 구조는 다음과 같습니다.

Stack 영역:
+-----------+
| a = 5     |
+-----------+
| b = 3.14  |
+-----------+
  • 이 변수들은 실제 값을 스택에 직접 저장하고 있습니다.

✅ 2) 참조형 변수의 저장 방식 (객체)

객체(Object)는 new 키워드를 사용해 힙(heap) 영역에 실제 데이터가 생성되고,
그 객체의 메모리 주소(참조값)는 스택(stack)에 있는 변수에 저장됩니다.

String name = new String("자바");

이 경우 메모리 구조는 다음과 같습니다.

Stack 영역                      Heap 영역
+-------------+                 +--------------------+
| name        | --------------> | "자바"(String 객체) |
| (주소값 저장)|                 +--------------------+
+-------------+
  • Stack의 name 변수는 실제 문자열 데이터를 갖지 않고, 힙 영역의 객체 주소만 참조합니다.

✅ 3) 클래스와 객체 예시 (실제 클래스 정의해서 이해하기)

class Person {
    String name;
    int age;

    Person(String name, int age){
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        int number = 10; // 기본형 변수
        Person p = new Person("홍길동", 30); // 참조형 변수 (객체)
    }
}

이 코드의 메모리 구조:

Stack 영역                         Heap 영역
+------------------+              +----------------------+
| number = 10      |              | Person 객체          |
+------------------+              |----------------------|
| p (주소값 참조) ----(참조)----->| name = "홍길동"      |
+------------------+              | age = 30             |
                                  +----------------------+
  • 기본형인 number는 스택에 값이 저장됨.
  • 참조형 변수 p는 스택에 객체의 주소(힙의 위치)를 저장.
  • 실제 Person 객체 데이터는 힙(heap)에 저장됨.

✅ 4) 객체와 참조형 변수 간의 관계 (중요한 개념)

객체와 변수가 헷갈리는 이유는 참조형 변수는 객체를 직접 저장하는 게 아니라 객체의 주소(참조값)를 저장하기 때문입니다.

Person p1 = new Person("김자바", 25);
Person p2 = p1; // p1의 주소값을 복사 (객체는 하나임)
Stack 영역                      Heap 영역
+------------+                 +----------------------+
| p1 --------|---------------->| Person 객체          |
+------------+                 |----------------------|
| p2 --------|---------------->| name = "김자바"      |
+------------+                 | age = 25             |
                               +----------------------+
  • p2는 객체를 복사한 게 아니라 p1의 주소를 복사했기 때문에, 두 변수가 같은 객체를 참조합니다.

🎯 한 줄로 이해하기

기본형 변수는 스택(Stack)에 실제 값을 저장하고,
참조형 변수(객체)는 힙(Heap)에 데이터를 저장하고 스택에는 그 객체의 주소(참조값)를 저장합니다.

profile
처음이라서 그래 가본적 없던 길에

0개의 댓글