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 키워드를 사용하는 이유
- 성능 최적화
- 큰 데이터 구조(예: 배열, 큰 구조체 등)를 값으로 전달하면 메모리 복사가 발생하여 성능이 저하될 수 있습니다.
- 이때,
ref를 사용하면 참조만 전달하므로 메모리 복사 비용을 줄일 수 있습니다.
- 값 변경 필요
- 메서드 내부에서 원래 변수의 값을 변경해야 하는 경우 유용합니다.
주의사항
ref키워드를 사용하는 변수는 메서드 호출 전에 반드시 초기화되어 있어야 합니다. 초기화되지 않은 변수를ref로 전달하려고 하면 컴파일 오류가 발생합니다.ref매개변수는 메서드 시그니처의 일부로 간주되므로, 메서드 오버로딩 시ref키워드를 포함하여 시그니처를 구분할 수 있습니다.ref키워드는 값 타입(예:int,struct)뿐만 아니라 참조 타입(예:class,array)에도 사용할 수 있습니다.
예제 코드
다음은 Swap 메서드에 ref 키워드를 사용하여 원래 변수 a와 b의 값을 직접 교환하는 예제입니다.
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: 메서드를 호출할 때 반드시 초기화되어 있어야 하며, 메서드 내부에서 값을 할당하지 않아도 됩니다.
참고
이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.