티스토리 뷰

Development/C#

ref 와 out의 차이점

오틸라 2008. 5. 26. 19:18
반응형

ref와 out은 비슷한것 같지만 약간 차이가 있습니다.


ref의 개념의 해당 변수의 주소값(referans) 자체를 접근하는 방식으로 ref를 사용하는 함수에서 값이 바뀌면 해당 변수의 값 또한 같이 바뀌게 되는 것입니다.

예1)

public int a = 2;


        private void test(ref int a)

        {

            a=1;

        }


int a 는 2라는 값으로 초기화 하였습니다. test함수를 호출하게 되면 ref로 받은 a인자를 1이라는 값으로 바꾸게 되는데

이때 int a의 값도 2에서 1로 바뀌게 되는 것 입니다.



out의 기능은 ref와 흡사합니다. 하지만

out은  인자에 대하여는 초기화 할필요는 없지만 함수 Return 전에는 초기화가 되어야만 합니다.

out을 사용한 함수내에서 초기화를 하지않고 끝낸다면 에러가 발생 하게 됩니다. 그리고 out 인자의 값은 전달되지 않습니다.


예2)

    int a = 1;

    int b = 2;


    Add(out a, out b);


    public static void Add(out int a, out int b)

    {

        int c = a;


        a = b;


        b = c;


        Console.WriteLine("a : {0}, b : {1}", a, b);

    }


Add()메서드에 들어온 a값에 1이들어있을것 같지만 값자체는 전달이 되지 않으므로


int c = a; 여기에서 a에는 아무런 값이 없습니다.


Console.WriteLine로 출력을 할때 에러가 나게 됩니다.


이것이 out이 ref와 다른점입니다.

반응형
댓글