재우니의 블로그




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)


'닷넷관련 > CSharp 🍚' 카테고리의 다른 글

Class 와 Method 에 대한 설명  (2) 2009.02.12
변수(variable) 에 대한 설명  (1) 2009.02.12
static 키워드에 대한 설명  (2) 2009.02.12
Main() 메소드에 대한 설명  (2) 2009.02.12
using 키워드에 대한 설명  (1) 2009.02.12