C# ref, out 키워드

강성원·2023년 11월 27일
0

C# 끄적끄적

목록 보기
1/11
  • 둘 다 인자를 참조로 전달한다.
    C++에서는 대상체 이름 앞에 "&"(Ampersand)를 붙여서 사용했는데 C#에서는 좀 다른가보다.
    종류도 3개나(+in) 있다.
  • ref와 out은 컴파일 시에 동일한 참조자의 역할로 인식되고, 런타임 시에 각자 다른 한정자로 인식이 된다.
    => 오버로딩이 불가하다.

ref 키워드

  • 넘기는 인수의 초기화가 무조건 돼있어야 한다.
  • 함수 측에서는 받은 매개변수의 값을 할당할 필요는 없다.
static void SetValueRef(ref int num)
        {
            // 값의 변경은 필요가 없다.
            // 해도 되긴 함.
            num = 300;
        }

        static void Main(string[] args)
        {
            int i = 10; 
            //int i; => X
            
            SetValueRef(ref i);

            Console.WriteLine(i); // 300
        }

out 키워드

  • 넘기는 인수가 초기화 돼있을 필요는 없다.
  • 함수 측에서는 받은 매개변수의 값을 무조건 할당해주어야한다.
static void SetValueOut(out int num)
{
	// 참조로 받은 매개변수에 값의 할당 필수
	num = 300;
}

static void Main(string[] args)
{
	int i; //초기 할당 필요 없다.

	SetValueOut(out i);

	Console.WriteLine(i); // 300
}

오버로딩 불가

static void SetValue(ref int num)
{
	num = 300;
}

static void SetValue(out int num)
{
	num = 300;
}

위에서 말했듯이 컴파일 시에 ref와 out은 동일한 것으로 인식되기 때문에, 컴파일 시에 위의 코드는 아예 똑같은 함수 2개를 써놨다고 볼 수 있다.

profile
개발은삼순이발

0개의 댓글