본문 바로가기

.NET/C#

[C#] ref 형식 파라미터 사용법

ref 형식 파라미터와 짝을 이루는 out 형식 파라미터에 대한 설명은 아래 글 참고.

 

[C#] out 형식 파라미터 사용법

메서드에서 두 개 이상의 값을 반환해야 하는 경우는 매우 빈번하다. 하지만 반환형이 void가 아닌 메서드에 대해서 반환 값은 반드시 1개만 존재할 수 있다. 이러한 경우 out 형식 파라미터를 사

cs-solution.tistory.com

 

ref 형식 파라미터는 값 형식 변수를 메서드의 파라미터로 전달하는 경우에도 참조 형식 변수처럼 메서드 내부에서 메서드 외부에 존재하는 실제 변수에 접근하여 값을 변경할 수 있도록 해주는 키워드이다. 쉽게 말해서 C/C++의 포인터이다.

 

가장 좋은 사용 예는 역시 두 변수의 값을 서로 바꿔주는 Swap 메서드이다.

 

1. Swap 메서드를 C++로 구현

void swap(int* a, int* b)
{
	int tmp = *a;
    *a = *b;
    *b = tmp;
}

int main()
{
	int a = 10, b = 5;
    
    cout << "a = " << a << ", b = " << b << endl;
    swap(&a, &b);
    cout << "a = " << a << ", b = " << b << endl;
    
    return 0;
}

2. Swap 메서드를 C#으로 구현

void Swap(ref int a, ref int b)
{
	int tmp = a;
    a = b;
    b = tmp;
}

static void Main(string[] args)
{
	int a = 10, b = 5;
    
    Console.WriteLine($"a = {a}, b = {b}");
    Swap(ref a, ref b);
    Console.WriteLine($"a = {a}, b = {b}");
}

 

위 두 코드는 완전히 동일한 결과를 가진다.

추가적으로, ref 키워드는 out 키워드와는 다르게 값을 반드시 초기화할 필요가 없다.