값(value) 형 변수가 실제 데이터 값을 직접 가지고 있는 경우
값(value) 형은 스택(stack) 메모리 공간에 저장되며, 할당 연산을 했을 때 별도의 메모리 영역에 할당
레퍼런스(reference) 형 변수가 실제 데이터 값이 있는 곳을 가리키는 값을 갖는 경우
레퍼런스(reference) 형은 힙(heap) 메모리 공간에 저장
할당 연산을 했을 때 힙 메모리 공간을 가리키는 레퍼런스 변수 값 사이에서 할당이 일어남
IntObj r1 = new IntObj();
스택(Stack)데이터 값을 임시로 저장하는 메모리 영역으로, 보통 메서드의 인자, 메서드 안에 선언한 변수들이 스택 공간에 할당
힙(Heap)일반적인 데이터 값을 할당하는 메모리 영역으로, 변수에 바로 데이터 값이 있는 것이 아니라 new 연산
자를 사용해서 메모리를 할당하고 값을 저장
class
Test {
static void Main()
{ int
v1 = 100; int
v2 = v1;
Console.WriteLine(
"v1 : {0} v2 : {1}", v1, v2 ); // 100, 100
v2 = 200;
Console.WriteLine(
"v1 : {0} v2 : {1}", v1, v2 ); // 100, 200
} }
레퍼런스(Reference) 형
int 형 멤버를 갖는 클래스를 하나 정의멤버 값을 바꾸게 되면 해당 변수뿐만 아니라 다른 변수에도 영향을 준다
r2에 값을 할당하는 경우, r1과 r2가 값이 동시에 바뀌며, 이유는 같은 힙 메모리 공간 을 가리키고 있기 때
using System; class IntObj {
public int val
= 100; } exam)
using System; class IntObj {
public int val
= 100; } class test {
static void Main()
{ IntObj
r1 = new IntObj();
IntObj
r2 = r1; Console.WriteLine(
"r1 : {0} r2 : {1}", r1.val, r2.val ); // 100, 100
r2.val = 200; Console.WriteLine(
"r1 : {0} r2 : {1}", r1.val, r2.val ); // 200, 200
}
'.NET > C# Basic' 카테고리의 다른 글
클래스 멥버 관련소스 (0) | 2008.10.01 |
---|---|
클래스 맴버 (0) | 2008.10.01 |
클래스와 네임스페이스 (0) | 2008.10.01 |
C# 디버깅 (0) | 2008.10.01 |
C# 오버플로우발생할때 오버플로우 점검 옵션 (0) | 2008.09.30 |
가비지 콜렉팅 + 스택(stack) 힙 (heap) +리플렉션등등 오류처리등.. (0) | 2008.09.30 |
역어셈블리 IL DASM (0) | 2008.09.30 |
실행인자 (0) | 2008.09.30 |