C# 키워드 ref에 관하여

안녕하세요. :smile:

C# 키워드 ref에 관하여 질문 드립니다.

일반적으로 ref를 사용하면 int와 같은 값 형 변수를
참조형(reference) 처럼 사용할 수 있게 해주는 것으로 알고 있는데요.

void GetData(ref int current)
{
    current = 7;
}

그래서 저는 int, string 같은 타입만이 사용(prefix) 가능한줄 알았습니다.
하지만 다른 객체도 ref 키워드 사용이 가능하다는 것을 최근에 알았습니다.

void GetData(ref User user)
{

}

이전까지는 ref가 생략이라는 개념으로 이해하고 있었는데요. :sweat_smile:

인스턴스 객체는 ref 키워드가 있든 없든 동일한건가요?
아니면 제가 모르는 무언가가 있는지도 궁금합니다.

읽어주셔서 감사합니다.

4개의 좋아요

다릅니다. ref 키워드를 주지않으면 값형이던 참조형이던 그 값 자체를 바꿀 수 없습니다. 즉,

ref instance는 instance 자체를 바꿀 수 있는 반면,

instance는 instance의 속성 또는 필드는 바꿀 수 있을지라도 instance를 바꿀 수는 없습니다.

3개의 좋아요

@dimohy 크게 잘못 알고 있었네요.
질문하길 정말 잘했네요! :sweat_smile:

좋은 설명 감사드립니다!!

2개의 좋아요

@dimohy 님이 잘 이야기해주셔서, 저는 ref 사용에 대한 다른 이야기를 하자면…

보통…

구조체를 자꾸 자꾸 함수들의 파라메터로 전달하면
값 복사가 일어나 의도치 않게 많은 메모리를 차지하게끔 만듭니다.

이때 이러한 상황을 피하기 위해 구조체를 일부러 ref로 넘겨 값복사가 일어나지 않고 쓰는 쪽에서
참조할 수 있도록 ref를 사용하기도 합니다.

헌데, ref로 값을 넘기면 넘겨받은 쪽에서 값을 변경해버릴 수 있기 때문에 약간 위험부담이 있었습니다.

해서 c#은 언제부터인가 in 키워드를 지원합니다.

in은 ref + readonly 라고 생각하면 될 것 같습니다.

5개의 좋아요