기본 패턴
csharp
void Increment(ref int value) => value++;
bool TryDivide(int left, int right, out int result)
{
if (right == 0)
{
result = 0;
return false;
}
result = left / right;
return true;
}설명
ref는 호출 전에 이미 값이 있어야 하고, 메서드 안에서 같은 변수를 직접 수정합니다.out은 호출 전에 초기화되지 않아도 되지만, 메서드 안에서 반드시 값을 할당해야 합니다.- 여러 결과를 빠르게 돌려주거나 성공 여부와 결과를 함께 반환할 때
out이 자주 쓰입니다. - 현대 C#에서는 튜플이나 레코드로 반환하는 대안도 많으므로,
ref/out은 꼭 필요한 상황에서만 쓰는 편이 읽기 좋습니다.
짧은 예제
csharp
int score = 10;
Increment(ref score);
if (TryDivide(20, 4, out int value))
{
Console.WriteLine($"{score}, {value}");
}빠른 정리
| 항목 | 설명 |
|---|---|
ref | 기존 변수를 참조로 넘겨 직접 수정 |
out | 결과 값을 메서드 밖으로 전달 |
| 호출 전 초기화 | ref는 필요, out은 불필요 |
| 메서드 내부 할당 | out은 반드시 필요 |
| 대안 | 튜플, 레코드 반환 등도 고려 가능 |
주의할 점
ref/out이 많아지면 함수 계약이 읽기 어려워질 수 있습니다. 인자 목록만 보고도 부수 효과가 예상되도록 정말 필요한 곳에만 쓰는 편이 좋습니다.