참조 매개변수(Reference Parameters)란?
참조 매개변수는 변수가 저장된 메모리 위치에 대한 참조를 의미합니다. 참조 매개변수는 메서드에 전달된 실제 인자(actual argument)와 동일한 메모리 위치를 가리킵니다.
값 매개변수와 달리, 매개변수를 참조로 전달하면 새로운 저장 공간이 생성되지 않습니다. 따라서 메서드 내부에서 매개변수 값을 변경하면, 호출한 쪽의 원본 변수에도 그 변경 사항이 그대로 반영됩니다.
C#에서는 ref 키워드를 사용하여 참조로 전달할 수 있습니다.
void UpdateValue(ref int number)
{
number = 100; // 원본 변수의 값이 변경됨
}
int x = 10;
UpdateValue(ref x);
// x는 이제 100값에 의한 전달(Pass by Value)이란?
값에 의한 전달은 C#에서 메서드에 매개변수를 전달하는 기본 방식입니다. 이 방식에서는 메서드가 호출될 때 각 값 매개변수마다 새로운 저장 공간이 생성됩니다.
그런 다음 실제 인자의 값이 이 새로운 공간으로 복사됩니다. 즉, 메서드 내부에서 매개변수를 아무리 수정해도 원본 인자에는 아무런 영향을 주지 않습니다.
void ChangeValue(int number)
{
number = 100; // 복사본만 변경됨
}
int x = 10;
ChangeValue(x);
// x는 여전히 10핵심 차이점 요약
- 저장 공간: 값 전달은 새로운 저장 공간을 생성하지만, 참조 전달은 기존 메모리 위치를 그대로 사용합니다.
- 데이터 복사: 값 전달은 인자의 값을 복사하고, 참조 전달은 메모리 주소를 공유합니다.
- 변경 영향: 값 전달 시 메서드 내부의 변경이 원본에 영향을 주지 않지만, 참조 전달 시에는 원본 값이 함께 변경됩니다.
메서드가 외부 변수의 값을 직접 수정해야 하는 경우에는 ref(또는 초기화 없이 전달 가능한 out) 키워드를 사용한 참조 전달이 적합하며, 단순히 값을 읽어 처리하는 경우에는 기본값인 값 전달 방식을 사용하는 것이 안전합니다.