변수
- 변수
- 코드: 값을 대입시켜 변화시킬 수 있는 요소
- 메모리: 데이터를 담는 일정 크기의 공간
- 변수를 "선언한다" : 컴파일러에게 해당 변수에 필요한 메모리 공간을 확보해달라고 알리는 것.
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#이다. (한빛미디어 저. 박상현)
댓글