value 와 reference 의 차이점을 알기 위해서는 간단한 소스로 결과값을 알면 이해가 가실 겁니다.
public static void Swap(int a, int b)
{
int temp = a;
a = b;
b= temp;
}
public static void Main()
{
int a = 100;
int b = 200;
Console.WriteLine("(a,b) = ({0}.{1})",a,b);
Swap (a,b); <- 값형 인자를 넘겨보자구요.^^
Console.WriteLine("(a,b) = ({0}.{1})",a,b);
}
위의 코딩을 value 값을 알기 위해 대충 적었는데요. 처음에 int a=100 과 그리고 b=200 이죠? 첫 출력값은 그대로 a=100, b=200 이렇게 나오고요. 그 다음에 Swap 함수에 a, b 인자값을 넘겼죠?
int temp = a; <- temp = 100
a = b; <- a = 200
b= temp; <- b = 100
자~~~ 위에 이런식으로 수식이 들어갔죠?
a = 200
b = 100
temp = 100
그러면 결과값은 위 처럼 나올까요? 그건 아님니다. ~~~
단지 value 는 변수 값만 넘겨주기 때문에, 함수에 아무리 값을 넣어서 변경해 줄려고 해도, 원래의 값을 바꿀수가 없죠. 따라서 인자값을 넘기는 방식을 값만 가져다 사용한는게 value 입니다.
그러면 , reference 는 어떨까요?
reference 로 변경할려면,,,,우선 아래처럼 약간 변경해야겠죠.
public static void Swap(ref int a, ref int b)
reference 형이라고 줄여서 ref 이거든요^^ 넣어주기만 하면 value 랑 구분이 되겠죠?
Swap (ref a,ref b); <- 이것도 ref 를 기재해 주시고요.
그럼 결과값은 처음 값은 그대로 나오겠죠? 그 다음에는요. reference 인자를 사용할 경우 값을 넘기는게 아니라 변수의 레퍼런트를 넘기는 겁니다. 어렵다구요? 뭔말이냐면 값을 복사해서 사용하는게 아니라 변수가 가르키는 값을 사용하는 것을 말합니다. 이점이 value 와 다른 차이점이겠죠?
그럼 변수가 지시한대로 value 형과 다른 200, 100 이 나오겠죠?
여기서 좀 더 설명한다면, 인자형이 맞아야 한다는 거죠.^^
맞지 않을 경우 컴파일 오류가 생길 겁니다. ^^
좀더 자세히 알고 싶으시면, 책을 사셔서 공부해 보시고요.
많은 사이트를 통해서 얻으시기 바랍니다.
posted by 심재운 (shimpark@gmail.com)