[C#] out과 ref의 차이 / 용도

2023. 4. 18. 15:32유니티, C#

먼저 일반적인 함수에서는 아래와 같이 a라는 변수를 매개변수로 넘겨준다고 a 그 자체가 변하지 않는다. 

int a = 10;

void ChangeNum(int a)
{
      a = 0;
}

ChangeNum(a);
Console.WriteLine(a);

//출력 : 10

 

 

그러나 ref를 사용하면

int a = 10;

void ChangeNum(ref int a)
{
      a = 0;
}

ChangeNum(ref a);
Console.WriteLine(a);

//출력 : 0

변수 a를 매개변수로 전달했지만 value가 아닌 reference로 전달했기 때문에 변수 그 자체의 값이 바뀐다.

out 역시 마찬가지로 변수의 값이 바뀌지만, 방향이 다르다.

 

ref는 a의 주소값을 ChangeNum의 매개변수로 던져주기 때문에 초기화가 필요하지만,

out은 ChangeNum내의 지역변수 a의 값을 밖에있는 a에게 던져주기 때문에 초기화가 필요하지 않다.

 


 

그럼 왜 쓸까?

C의 포인터 역할을 한다는 것 까진 알겠다.

Call by Value보다 Call by Reference가 가지는 이점이 무엇인가?

 

1. 구조체 변수와 같은 스택 복사가 부담스러운 변수를 함수 인자로 내보내고 싶을때.(복사가 없으니 메모리 부담이 적다.)

2. 함수에서 여러 타입을 return 받고 싶을때.