using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 40;
            int b = 10;
 
            Console.WriteLine("Swap before: a={0}, b={1}", a, b);
 
            Swap(a, b);
 
            Console.WriteLine("Swap after: a={0}, b={1}", a, b);
        }
 
        static void Swap(int a, int b)
        {
            int temp = b;
            b = a;
            a = temp;
        }
    }
}

결과 :

Swap before: a=40, b=10
Swap after: a=40, b=10
계속하려면 아무 키나 누르십시오 . . .

Swap 함수의 내용을 보면 a와 b의 값을 서로 바꿔버리는 기능을 수행합니다.

여기서 이렇게 매개변수를 변수의 값으로 가져온 경우를 Call by value(복사에 의한 함수 호출)

이라고 부릅니다.

그러나 Swap 함수가 실행됨에도 불구하고 a와 b의 값은 바뀌지 않았습니다.

왜 값이 바뀌지 않았던 걸까요?

우리가 메소드로부터 변수를 넘겨줄 때부터, 매개변수 a와 b이 변수 a와 b를 가르키는 게 아니고,

그저 변수 a와 b의 값을, 매개변수 a와 b로 복사하는 것 뿐입니다.

한마디로 말하자면, 매개변수 a와 b, 변수 a와 b는 서로 별개이며, 다른 메모리 공간을 사용합니다.

그저 매개변수 a와 b의 값이 서로 바뀌었을 뿐, 변수 a와 b의 값은 그대로인 셈입니다.

그렇다면 변수 a와 b의 값을 바꾸도록 하려면 어떻게 해야할까요?

바로 Call by reference(참조에 의한 호출)로 넘긴다면 가능합니다.