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 라이센스를 따릅니다.