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

C#에서 배열 타입의 ref(참조) 매개변수란 무엇이고, 어떻게 사용할까?

C#에서 ref 키워드를 사용하면 참조(reference) 매개변수를 선언할 수 있습니다. 참조 매개변수는 변수가 저장된 메모리 위치에 대한 참조를 의미합니다. 값(value) 매개변수와 달리, 매개변수를 참조로 전달하면 새로운 저장 공간이 생성되지 않고 원본 변수 자체를 그대로 가리키게 됩니다.

ref 매개변수 선언 방법

일반적인 ref 매개변수는 다음과 같이 선언합니다.

public void swap(ref int x, ref int y) {}

배열 타입의 ref 매개변수는 아래처럼 선언할 수 있습니다.

static void Display(ref int[] myArr)

배열 타입 ref 매개변수 활용 예제

다음 예제는 C#에서 배열 타입의 ref 매개변수를 실제로 어떻게 다루는지 보여줍니다. 메서드 내부에서 배열이 null인 경우 새 배열을 할당하고, 값을 변경하면 호출자 쪽의 원본 배열에도 그대로 반영됩니다.

class TestRef {
    static void Display(ref int[] myArr) {
        // 배열이 null이면 새로운 배열을 생성
        if (myArr == null) {
            myArr = new int[10];
        }

        myArr[0] = 345;
        myArr[1] = 755;
        myArr[2] = 231;
    }

    static void Main() {
        int[] arr = { 98, 12, 65, 45, 90, 34, 77 };

        // ref 키워드로 배열을 참조로 전달
        Display(ref arr);

        for (int i = 0; i < arr.Length; i++) {
            System.Console.Write(arr[i] + " ");
        }

        System.Console.ReadKey();
    }
}

실행 결과

345 755 231 45 90 34 77

ref 매개변수의 핵심 포인트

  • 새 저장 공간 없음: ref로 전달된 매개변수는 복사본이 아니라 원본 변수의 메모리 위치를 직접 참조합니다.
  • 호출 시에도 ref 필수: 메서드를 호출할 때도 Display(ref arr)처럼 ref 키워드를 명시해야 합니다.
  • null 처리 가능: 메서드 내부에서 배열을 새로 할당하면, 그 변경 사항이 호출자의 변수에도 그대로 적용됩니다.
  • 초기화 필요: ref 매개변수로 전달되는 변수는 전달 전에 반드시 초기화되어 있어야 합니다.

이처럼 배열 타입에 ref를 사용하면 메서드 안에서 배열 자체를 재할당하거나 내용을 수정한 결과가 호출자에게 그대로 전달되므로, 여러 값을 한 번에 반환하는 효과를 얻을 수 있습니다.