C# Method(2)

#1. 값에 의한 전달(Call by value)
전에 했던 Plus()메소드를 참고로 하면서 값에 의한 전달을 정리하겠다.

namespace CSharp
{
   class Calulator
   {
      public static int plus(int a, int b)
      {
       return a+b;
      }

   }
   class Program
  {
     static void Main(string[] args)
     {
        int nNum1=10;
        int nNum2=20;

       Console.WriteLine(Calculator.Plus(nNum1, nNum2));

     }
  }

}
위를 보면 nNum1의 값(10)과 nNum2의 값(20)을 Plus() 메소드의 매개 변수인 a,b에 각각 전달 되는 것을 알 수 있다.

이렇게 값 자체를 복사해서 매개 변수에 넘겨주는 방식을 값에 의한 전달(Call by value)라고 한다.

그런데 여기서 값을 전달받은 Plus()메소드에 있는 a,b 그리고 main()메소드에 있는 nNum1,nNum2은 서로 영향을 주는 관계일까?

결론부터 말하면 아니다.

이 네개의 변수들은 완전히 별개의 변수로 Plus()에서 멀하던간에 Main()에 있는 변수에는 아무런 영향을 미치지 않는다


#2.참조에 의한 전달(Call by reference)

  class Program
    {
   
        static void swap(ref int a, ref int b)
        {
            int temp = b;
            b = a;
            a = temp;
        }
        static void Main(string[] args)
        {
            int x = 1;
            int y = 2;
            swap(ref x, ref y);

            Console.WriteLine("x: {0},y : {1}", x, y);
        }
    }

swap()메소드는 서로의 값을 바꿔주는 기능을 한다. 여기서 주목해야 할것은 ref라는 키워드이다. ref란 참조(Reference)라는 뜻인데 메소드의 매개 변수 앞에 ref키워드를 붙여주면 swap()메소드의 매개 변수 a,b는 main()에서 원본 변수인 x,y를 직접 참조하게 된다.

이와 같이 원본 변수를 참조하는 방식의 전달을 참조에 의한 전달(Call by reference)라고 한다.

만약 ref 키워드를 빼면 어떻게 될것인가? 당연하게도 그럴 경우 값에 의한 참조가 되어버리기 때문에 Swap()에서 아무리 뭔 짓을 해도 Main()에 있는 변수에는  아무리 영향을 주지 못한다.
ㅡ 뇌를 자극하는 C#4.0프로그래밍 ㅡ

msdn:
http://msdn.microsoft.com/ko-kr/library/
ddnl

Post a Comment

다음 이전