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

C# ref 키워드로 변수에 참조 할당하는 방법

C#에서 변수에 참조를 할당하는 방법

C#에서 변수에 대한 참조(reference)를 할당하려면 ref 키워드를 사용합니다. 참조 매개변수는 변수의 메모리 위치를 가리키는 참조로, 메서드에 인자를 전달할 때 원본 변수 자체를 대상으로 작업할 수 있게 해줍니다.

값(value)으로 매개변수를 전달하면 변수의 복사본이 생성되어 전달됩니다. 반면 참조(reference)로 매개변수를 전달하면 복사본이 아닌 원본 변수의 메모리 주소가 전달되기 때문에 새로운 저장 공간이 생성되지 않습니다. 따라서 메서드 내부에서 수행한 모든 변경 사항은 호출자의 원본 변수에 그대로 반영됩니다.

ref 매개변수의 특징

  • 참조 매개변수는 메서드 정의 시 ref 키워드로 선언해야 합니다.
  • 메서드를 호출할 때도 인자 앞에 ref 키워드를 반드시 명시해야 합니다.
  • 메서드에 전달하기 전에 해당 변수가 반드시 초기화되어 있어야 합니다.
  • 메서드 내부에서 변경한 값이 호출자 측 변수에 그대로 적용됩니다.

예제: ref 키워드로 두 값 교환하기

다음 예제는 ref 키워드를 사용하여 두 개의 정수 값을 서로 교환(swap)하는 과정을 보여줍니다.

using System;

namespace Demo {
   class Program {
      public void swap(ref int x, ref int y) {
         int temp;

         temp = x; /* x의 값을 임시 저장 */
         x = y;    /* y의 값을 x에 대입 */
         y = temp; /* temp에 저장해 둔 값을 y에 대입 */
      }

      static void Main(string[] args) {
         Program p = new Program();

         /* 지역 변수 정의 */
         int a = 99;
         int b = 110;

         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);

         /* 함수를 호출하여 두 값을 교환 */
         p.swap(ref a, ref b);

         Console.WriteLine("After swap, value of a : {0}", a);
         Console.WriteLine("After swap, value of b : {0}", b);

         Console.ReadLine();
      }
   }
}

실행 결과

Before swap, value of a : 99
Before swap, value of b : 110
After swap, value of a : 110
After swap, value of b : 99

코드 설명

swap 메서드는 매개변수 xy를 각각 ref 키워드로 선언했습니다. 이렇게 하면 메서드가 호출될 때 변수 ab의 복사본이 아니라 메모리 위치 자체가 전달됩니다.

따라서 메서드 내부에서 xy의 값을 교환하면 호출자 쪽의 ab 값도 함께 바뀌게 됩니다. 실행 결과에서 확인할 수 있듯이, 교환 전 a는 99였지만 교환 후에는 110으로 변경된 것을 볼 수 있습니다.

만약 ref 없이 일반적인 값 전달 방식으로 호출했다면, 메서드 내부에서만 값이 바뀌고 원본 변수 ab는 전혀 영향을 받지 않았을 것입니다. 이것이 값 전달과 참조 전달의 가장 큰 차이점입니다.