C#에서 ref와 out 키워드의 차이점에 대해 설명하세요.
ref와 out은 메서드 매개변수를 참조로 전달할 때 사용하는 키워드입니다.
ref는 이미 값이 초기화된 변수를 참조로 전달하고,
out은 메서드 내부에서 반드시 값을 초기화해야 하는 참조 매개변수입니다.
즉, ref는 값을 전달하고 수정 가능하게 하며, out은 값을 반환하는 목적으로 사용됩니다.
=> 값을 넘겨주면서 수정이 필요한 경우
public void AddTen(ref int number)
{
number += 10;
}
int value = 5;
AddTen(ref value);
// => 15
=> 메서드 결과를 전달할 때
public void GetCoordinates(out int x, out int y)
{
x = 10;
y = 20;
}
int posX, posY;
GetCoordinates(out posX, out posY);
// => 10, 20
| 구분 | ref | out |
|---|---|---|
| 초기화 필요 여부 | 호출 전 반드시 초기화 | 호출 전 초기화 불필요 |
| 메서드 내부 초기화 | 선택 사항 | 필수 |
| 주 용도 | 값 전달 + 수정 | 결과 반환 |
| 가독성 | 넘겨받은 값 수정 가능성 명확 | 결과를 반환하려는 의도 명확 |
readonly를 매개변수 수준에서 적용한 효과=> 읽기 전용 참조 전달
public void PrintPoint(in Vector3 point)
{
// point.x = 10; // 오류 발생
Console.WriteLine(point);
}
readonly ref라고도 부름 (순서만 다름)=> 주로 반환할 값이 struct이고 원본 변경을 막고 싶을 때
private BigStruct data;
public ref readonly BigStruct GetDataReadOnly() => ref data;
ref readonly BigStruct result = ref GetDataReadOnly();
// result.a = 10; // 오류 발생
refoutinref readonly