Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 메서드에서 매개변수를 참조로 전달하는 방법 (ref 키워드)

C# 참조 매개변수란?

참조 매개변수(reference parameter)는 변수의 메모리 위치에 대한 참조입니다. 일반적인 값 매개변수(value parameter)와 달리, 매개변수를 참조로 전달하면 해당 매개변수를 위한 새로운 저장 공간이 생성되지 않습니다.

즉, 참조 매개변수는 메서드에 전달된 실제 인자와 동일한 메모리 위치를 가리킵니다. 그렇기 때문에 메서드 내부에서 매개변수의 값을 변경하면, 호출부에 있는 원본 변수의 값도 함께 변경됩니다.

C#에서는 ref 키워드를 사용하여 참조 매개변수를 선언합니다. 주의할 점은 메서드를 호출할 때도 인자 앞에 ref 키워드를 반드시 붙여야 하며, 전달되는 변수는 호출 전에 미리 초기화되어 있어야 한다는 것입니다.

예제 코드

다음은 두 변수의 값을 서로 교환(swap)하는 예제입니다. ref 키워드를 사용해 참조 매개변수를 선언하고 전달하는 과정을 확인할 수 있습니다.

using System;

namespace CalculatorApplication {
    class NumberManipulator {
        public void swap(ref int x, ref int y) {
            int temp;
            temp = x; /* x의 값을 임시 변수에 저장 */
            x = y;    /* y의 값을 x에 대입 */
            y = temp; /* 임시 변수의 값을 y에 대입 */
        }

        static void Main(string[] args) {
            NumberManipulator n = new NumberManipulator();

            /* 지역 변수 정의 */
            int a = 100;
            int b = 200;

            Console.WriteLine("교환 전 a의 값 : {0}", a);
            Console.WriteLine("교환 전 b의 값 : {0}", b);

            /* 값을 교환하기 위해 함수 호출 (ref 키워드 사용) */
            n.swap(ref a, ref b);

            Console.WriteLine("교환 후 a의 값 : {0}", a);
            Console.WriteLine("교환 후 b의 값 : {0}", b);

            Console.ReadLine();
        }
    }
}

실행 결과

교환 전 a의 값 : 100
교환 전 b의 값 : 200
교환 후 a의 값 : 200
교환 후 b의 값 : 100

핵심 정리

위 예제에서 abref 키워드를 통해 참조로 전달되었기 때문에, swap 메서드 내부에서 이루어진 변경이 Main 메서드의 원본 변수에 그대로 반영되었습니다. 만약 ref 없이 값으로 전달했다면, 메서드 내부에서 아무리 값을 바꿔도 원본 변수에는 영향을 주지 못합니다.

참고로 C#에는 ref 외에 out 키워드도 있습니다. out은 메서드가 여러 값을 반환할 때 사용되며, 호출 전 초기화가 필요 없다는 점이 ref와 다릅니다. 상황에 맞게 두 키워드를 구분하여 사용하면 됩니다.