Unity And C#/문법
C# 참조해야 할 때 사용할 수 있는 ref와 out
khjtoy
2023. 1. 28. 00:56
유니티로 게임을 개발하고 있던 중 함수 매개변수를 참조형 변수로 사용을 했어야 했습니다.. 저는 평소 C++에서
사용하는 참조형 변수(&)를 사용하여 문제를 해결하려 했습니다.
class Program
{
static void Fun(int& num)
{
num = 3;
}
static void Main(string[] args)
{
int a = 5;
Fun(a);
Console.WriteLine(a);
}
}
위 코드처럼 쓰니 프로그램이 정상적으로 작동하지 못하고 오류가 발생했습니다.
그래서 저는 C#의 참조형 변수를 선언하는 방법을 찾아보니 ref 또는 out을 사용하면 된다고 하였습니다.
ref와 out의 공통점
class Program
{
static void Fun(ref int num)
{
num = 3;
}
static void Main(string[] args)
{
int a = 5;
Fun(ref a);
Console.WriteLine(a);
}
}
class Program
{
static void Fun(out int num)
{
num = 3;
}
static void Main(string[] args)
{
int a = 5;
Fun(out a);
Console.WriteLine(a);
}
}
3
첫번째 코드는 ref로 두번째 코드는 out으로 참조를 하였습니다. 둘다 a를 참조를 하여
다른 함수에서 a의 값을 바꿀 수 있습니다. 그럼 둘의 차이점이 뭘까요?
ref와 out의 차이점
class Program
{
static int Fun(ref int num)
{
int a = num;
a++;
return a;
}
static void Main(string[] args)
{
int a = 3;
Console.WriteLine(Fun(ref a));
}
}
4
class Program
{
static int Fun(out int num)
{
int a = num;
a++;
return a;
}
static void Main(string[] args)
{
int a = 3;
Console.WriteLine(Fun(out a));
}
}
첫번째 ref를 사용한 코드는 아무런 문제없이 참조가 되어 잘 실행되지만 2번째 코드인
out을 사용한 코드는 오류가 나 실행이 되지 않습니다.
그러면 out은 어떻게 코드를 작성해야지 실행될까요?
class Program
{
static int Fun(out int num)
{
num = 5;
num++;
return num;
}
static void Main(string[] args)
{
int a;
Console.WriteLine(Fun(out a));
}
}
6
위 코드처럼 작성하여 out을 사용하면 제대로 실행이 됩니다.
이러한 코드를 보면서 어떠한 차이점이 있는지 알 수 있습니다.
ref
|
매개 변수를 사용하기 전에는 무조건 초기화를 해줘야합니다.
함수 내에서 참조한 매개 변수의 값을 바꾸지 않아도 됩니다.
|
out
|
매개 변수로 전달하기 전에 값을 초기화할 필요가 없습니다.(모든 초기 값이 함수 내에서 무시)
함수 내에서 참조한 매개 변수의 값을 무조건 초기화해줘야합니다.
|