[Unity/C#]ref in out

강동현·2024년 1월 28일
0

Unity/C#

목록 보기
18/26
  • C++의 ref, val 타입에 따른 특성을 구현

ref

  • 읽고 쓰기 전용
  • 위 내용에서 구조체 값 타입참조로 넘길 수 없나?
    • 있다
      • ref 키워드
  • ref: 참조에 의한 호출로 변경
  • C++ type&와 동일
    • 인자로 주소를 넘기고, 주소에 접근해서 참조
  • [중요]ref 인자로 보내는 값이 초기화 되어있지 않다면 에러
public class Test : MonoBehaviour
{
	void Start()
    {
    	int x = 3;
        int y = 6;
        Swap(x, y);//ref 키워드 생략 Ver
        Swap(ref x, ref y);//ref 키워드 호출 Ver
    }
    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);//in 키워드 생략 Ver
    MyFunc(in a);//in 키워드 호출 Ver
    print(a);
}
void MyFunc(in int arg)
{
	// arg = 2; // 에러 발생
    print(arg);
}

out

  • 쓰기 전용
  • 매개변수를 사용 없이 수정만 가능
  • C++에 없는 C#만의 기능
  • 초기화 되지 않은 값인자로 넣어야 함
  • 리턴 값의 수를 늘리고 싶을 때 사용
void Start()
{
	int o; // 초기화 되지 않은 값을 인자로 넣어야 함
    MyFunc(o);//out 키워드 생략 Ver
    MyFunc(out o);
    print(o);
}
void MyFunc(out int arg)
{
	// print(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);
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글