1. 변수란 무엇인가?

  • 코드 관점: 값을 대입하거나 변경할 수 있는 요소.
  • 메모리 관점: 데이터를 담는 일정 크기의 공간. 데이터 형식에 따라 크기가 달라집니다.
  • 수학적 관점: 변하는 값을 가진 요소.

컴퓨터에서 변수를 사용하려면 변수 선언이 필요합니다.
변수 선언은 컴파일러에게 필요한 메모리 공간을 예약하도록 지시하는 과정입니다.

int x; // 변수 선언
x = 100; // 데이터 할당
 

2. 메모리와 변수의 관계

변수를 선언하면 메모리 공간이 할당되고, 값을 대입하면 해당 공간에 데이터가 저장됩니다.

예시:

int x = 100;

위 코드는 선언과 동시에 값을 할당한 경우로, 변수 x의 메모리 공간에 100이 저장됩니다.


3. 값 형식(Value Type)과 참조 형식(Reference Type)

변수는 값 형식참조 형식으로 나뉩니다.

a. 값 형식 (Value Type)

  • 데이터를 스택(Stack) 메모리 영역에 저장.
  • 코드 블록이 끝나면 자동으로 제거됩니다.
  • 저장 및 제거 과정: 위 코드에서 b가 먼저 제거되고, 다음으로 a가 제거됩니다.
  • {
        int a = 100;
        int b = 200;
    }

b. 참조 형식 (Reference Type)

  • 데이터는 힙(Heap)에 저장되고, 스택은 힙의 메모리 주소를 참조합니다.
  • 코드 블록이 끝나도 힙에 데이터는 남아 있습니다.
  • 힙의 데이터를 제거하려면 **가비지 컬렉터(Garbage Collector)**가 필요합니다.

예시:

object a = 10;
  • 스택: 변수 a와 메모리 주소값 (&2000) 저장.
  • : 데이터 10이 주소 2000에 저장.

4. 변수의 종류

a. 전역 변수 (Global Variable)

  • 클래스 내부에서 선언되며, 클래스 객체가 살아있는 동안 참조 가능합니다.
  • 기본값이 자동으로 할당됩니다. (예: int 타입은 0)

예시:

class Example
{
    int globalVar; // 기본값 0 자동 할당
}

b. 지역 변수 (Local Variable)

  • 메서드 내에서 선언되며, 메서드 호출이 끝나면 메모리에서 제거됩니다.
  • 기본값이 자동으로 할당되지 않으므로, 초기화를 해야 사용 가능합니다.

예시:

public void Method()
{
    int localVar;
    localVar = 100; // 초기화 필수
}

5. 메모리 구조 요약

  • 스택(Stack): 값 형식 데이터를 저장하며, 데이터가 코드 블록이 끝나면 제거됩니다.
  • 힙(Heap): 참조 형식 데이터를 저장하며, 데이터가 명시적으로 제거되지 않으면 계속 유지됩니다.

+ Recent posts