소프트웨어/C# & ASP.NET

C#에서의 데이터형

falconer 2009. 8. 6. 08:55
값형과 레퍼런스형 비교

닷넷에서
제공하는 데이터형은 변수가 어떤 값을 갖느냐에 따라 분류

(value) 형  변수가 실제 데이터 값을 직접 가지고 있는 경우

(value) 형은 스택(stack) 메모리 공간에 저장되며, 할당 연산을 했을 때 별도의 메모리 영역에 할당


레퍼런스(reference) 형 변수가 실제 데이터 값이 있는 곳을 가리키는 값을 갖는 경우 

레퍼런스(reference) 형은 (heap) 메모리 공간에 저장

할당 연산을 했을 때  메모리 공간을 가리키는 레퍼런스 변수 값 사이에서 할당이 일어남




 IntObj  r1  =  new  IntObj();



스택(Stack)데이터 값을 임시로 저장하는 메모리 영역으로, 보통 메서드의 인자, 메서드 안에 선언한 변수들이 스택 공간에 할당

(Heap)일반적인 데이터 값을 할당하는 메모리 영역으로, 변수에 바로 데이터 값이 있는 것이 아니라 new 연산

자를 사용해서 메모리를 할당하고 값을 저장


(value)


다음은 값(value) 데이터형 중에서 int 형을 사용한 예
v2에 값을 할당하는 경우 v2 값만 바뀌므로, v1 값과 v2 값이 별도의 메모리 공간을 갖고 저장되
기 때문의 이유

exam)

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

    }

}




출처 : http://ssogarif.tistory.com/entry/C%EC%97%90%EC%84%9C%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%98%95