포스트

C#의 ref 키워드 간단 정리

C#의 ref 키워드는 메서드에 매개변수를 참조(Reference)로 전달 할 때 사용됩니다.

이는 값이 아닌 변수의 참조를 전달하여 메서드 내에서 해당 변수의 값을 직접 변경할 수 있게 합니다.

ref 키워드를 사용하면 메서드가 호출되는 동안 원본 변수의 값이 변경될 수 있습니다. 이는 일반적인 값 전달(Value) 방식과 구별됩니다.

ref 키워드의 사용 방법

1. ref 매개변수 선언

메서드 정의에서 참조로 받고 싶은 매개변수를 ref 키워드로 선언해야 합니다.

1
2
3
4
void SampleMethod(ref int parameter)
{
    parameter = 10; // 이 메서드가 호출되면 원래 변수의 값이 10으로 변경됩니다.
}

2. ref 매개변수로 메서드 호출

메서드를 호출할 때도 ref 매개변수의 인수 앞에 ref 키워드를 붙여야 합니다.

1
2
3
int number = 5;
SampleMethod(ref number);
Console.WriteLine(number); // 출력 결과: 10

ref 키워드를 사용하는 이유

  1. 성능 최적화
    • 큰 데이터 구조(예: 배열, 큰 구조체 등)를 값으로 전달하면 메모리 복사가 발생하여 성능이 저하될 수 있습니다.
    • 이때, ref를 사용하면 참조만 전달하므로 메모리 복사 비용을 줄일 수 있습니다.
  2. 값 변경 필요
    • 메서드 내부에서 원래 변수의 값을 변경해야 하는 경우 유용합니다.

주의사항

  • ref 키워드를 사용하는 변수는 메서드 호출 전에 반드시 초기화되어 있어야 합니다. 초기화되지 않은 변수를 ref로 전달하려고 하면 컴파일 오류가 발생합니다.
  • ref 매개변수는 메서드 시그니처의 일부로 간주되므로, 메서드 오버로딩 시 ref 키워드를 포함하여 시그니처를 구분할 수 있습니다.
  • ref 키워드는 값 타입(예: int, struct)뿐만 아니라 참조 타입(예: class, array)에도 사용할 수 있습니다.

예제 코드

다음은 Swap 메서드에 ref 키워드를 사용하여 원래 변수 ab의 값을 직접 교환하는 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

class Program
{
    static void Main()
    {
        int a = 5;
        int b = 10;

        Console.WriteLine("a = {0}, b = {1}", a, b);  // a = 5, b = 10
        Swap(ref a, ref b);
        Console.WriteLine("a = {0}, b = {1}", a, b);  // a = 10, b = 5
    }

    static void Swap(ref int x, ref int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
}

out vs ref

  • out: 메서드를 호출할 때 초기화되지 않아도 되고, 메서드 내부에서 반드시 값을 할당해야 합니다.
  • ref: 메서드를 호출할 때 반드시 초기화되어 있어야 하며, 메서드 내부에서 값을 할당하지 않아도 됩니다.

참고

C#의 out 키워드 간단 정리

C#의 값 타입과 참조 타입

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.