본문 바로가기
Language/C#

[C#] 변수, 값과 참조 형식

by 데브드그 2022. 3. 21.

변수

  • 변수
    • 코드: 값을 대입시켜 변화시킬 수 있는 요소
    • 메모리: 데이터를 담는 일정 크기의 공간
  • 변수를 "선언한다" : 컴파일러에게 해당 변수에 필요한 메모리 공간을 확보해달라고 알리는 것.
int x; // 선언
x = 100; // 데이터 할당

int x = 100; // 선언과 초기화를 동시에 할 수도 있다

int x, y, z;
int a = 30, b = 40, c= 50;

int      데이터 형식
num  식별자(변수의 이름)

컴파일러에 선언된 변수

  • int x = 100;과 같이 데이터 할당이 이루어지고 나면 변수 x에 할당된 메모리 공간에 데이터 100이 기록된다.
  • 초기화 initialization
    • 변수에 최초의 데이터를 할당하는 것. 변수를 선언한 후 아무 데이터도 입력하지 않으면 쓰레기 데이터가 들어감. C#은 이런 문제를 방지하도록 초기화를 강제한다. 초기화되지 않은 변수를 사용 시 컴파일러가 에러 메세지를 내면서 실행 파일이 생성되지 않는다.
    • cf) 차후에 다루겠지만 이럴 때 int? Datetime? 과 같이 일부 자료형은 뒤에 '?'를 붙여서 초기화 없이 선언만 가능하도록 하는 기능도 존재한다.

 

값 형식과 참조 형식

  • 값 형식 Value Type: 변수가 값을 담는 데이터 형식 ~ 스택 Stack 메모리 영역
  • 참조 형식 Reference Type: 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식 ~ 힙 Heap 메모리 영역

□ 스택과 값 형식

{ //코드 블록 시작
    int a = 100;
    int b = 200;
    int c = 300;    
} //코드 블록 끝

 

코드 블럭 안에서 스택 메모리 공간에 데이터가 적재되었다 제거되는 과정

  • 값 형식의 변수들은 모두 스택 메모리 공간에 저장됨. 즉, 코드 블록 안에서 생성된 모든 값 형식의 변수들은 프로그램 실행이 코드 블록의 끝 '}'을 만나면 메모리에서 제거된다.

□ 힙과 참조 형식

  • 스택과는 달리 힙은 저장된 데이터를 스스로 제거하지 X
    • CLR의 가비지 컬렉터 Garbage Collector: 힙에 더 이상 사용하지 않는 객체가 있으면 해당 객체를 쓰레기로 간주하고 수거
    • CLR은 코드 블록이 끝나는 시점과 상관없이 개발자가 원하는 데이터를 살릴 수 있는 또 다른 메모리 영역 제공 → 힙
  • 참조 형식의 변수는 힙 영역에 데이터를 저장하고 스택 영역에는 데이터가 저장된 힙 메모리의 주소를 저장
  • 실제 데이터가 저장된 메모리의 주소를 참조
{
    object a = 10;
    object b = 20;
 }

참조 형식

 

 

 

 

 

 

 

참고: 이것이 c#이다. (한빛미디어 저. 박상현)

댓글