`ref` 키워드의 다양한 쓰임
ref 키워드의 다양한 쓰임
C#에서 ref 키워드를 한 곳에서만 쓰지는 않아요. 위치에 따라 역할이 꽤 달라지는데, 어디에 오느냐에 따라 참조로 넘기기, 참조로 돌려주기, 참조 변수 선언 같은 일을 각각 맡게 됩니다. 하나씩 짚어볼게요.
본문
ref 키워드는 다음과 같은 곳에서 쓰입니다.
-
메서드 시그니처와 호출에서 — 인자를 메서드에 참조로 전달할 때 써요. 값을 복사해서 넘기는 대신 원래 변수를 그대로 가리키게 합니다.
void Increment(ref int number) { number++; } int value = 41; Increment(ref value); -
메서드 시그니처에서 — 호출한 쪽으로 값을 참조로 반환할 때 사용합니다. 자세한 내용은
ref return문서를 참고해요.private int[] numbers = { 1, 2, 3 }; public ref int FindFirst() { return ref numbers[0]; } -
지역 변수 선언에서 — 참조 변수를 선언할 때 씁니다. 값의 복사본이 아니라 대상 값을 그대로 가리키는 변수예요.
ref int first = ref FindFirst(); first = 100; // numbers[0]이 함께 바뀝니다 -
**조건부 ref 식**이나 **ref 할당 연산자**의 일부로도 쓰여요. 조건에 따라 서로 다른 변수를 참조로 선택하거나, ref 식끼리 할당할 때 활용합니다.
ref int b = ref (condition ? ref x : ref y); -
struct선언에서 —ref struct를 선언할 때 사용해요. 힙이 아니라 스택에만 존재하는 특수한 구조체 타입으로, 자세한 내용은ref구조체 형식 문서를 참고하세요.ref struct SpanLike { } -
ref struct정의 안에서 —ref필드를 선언할 때 씁니다. 해당 내용은ref구조체 형식 문서의ref필드 절에서 다뤄요.ref struct Container { public ref int Stored; } -
제네릭 타입 선언에서 — 형식 매개변수가
allows ref struct타입을 허용하도록 지정할 때 사용해요.class Example<T> where T : allows ref struct { }