- C++의 ref, val 타입에 따른 특성을 구현
ref
- 읽고 쓰기 전용
- 위 내용에서 구조체 값 타입을 참조로 넘길 수 없나?
- ref: 참조에 의한 호출로 변경
- C++ type&와 동일
- [중요]ref 인자로 보내는 값이 초기화 되어있지 않다면 에러
public class Test : MonoBehaviour
{
void Start()
{
int x = 3;
int y = 6;
Swap(x, y);
Swap(ref x, ref y);
}
void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
}
in
- 읽기 전용
- ref는 원본에 접근할 수 있기 때문에 위험하다.
- 매개변수를 수정 없이 사용만 가능(C++ const& 동일)
- C++ const type&와 동일
- 값 수정 불가
- [중요]in 인자로 보내는 값이 초기화 되어있지 않다면 에러
void Start()
{
int a = 1;
MyFunc(a);
MyFunc(in a);
print(a);
}
void MyFunc(in int arg)
{
print(arg);
}
out
- 쓰기 전용
- 매개변수를 사용 없이 수정만 가능
- C++에 없는 C#만의 기능
- 초기화 되지 않은 값을 인자로 넣어야 함
- 리턴 값의 수를 늘리고 싶을 때 사용
void Start()
{
int o;
MyFunc(o);
MyFunc(out o);
print(o);
}
void MyFunc(out int arg)
{
arg = 10;
}
void Start()
{
MyFunc(out int o);
print(o);
}
- 대표적 out 사용 예시 : int.TryParse
void Start()
{
bool isParse = int.TryParse("10", out int result);
print(isParse);
print(result);
}