본문 바로가기

C#/C# 문법

C# ref와 out의 차이

728x90
728x90

C#에서는 레퍼런스를 전달할 때 ref 또는 out 키워드를 이용해 전달해야 하며 전달하는 인자의 레퍼런스를 명시해야만 한다.

 

ref나 out이나 레퍼런스를 의미하는 것은 똑같은데 어떤 차이가 있을까?

 

out은 출력 전용 매개 변수의 의미로 작동하는데 ref에서 안전장치를 하나 더 거는 것으로 이해할 수 있다.

 

out 키워드로 지정된 인자는 반드시 값을 할당해야 하는 조건이 들어간다.

메소드에 대해 out 매개 변수 y에 아무 값도 넣지 않으면 컴파일러에서 에러를 발생시킨다.

 

public static void StoreAndAdd(ref int x, out int y)
{
    y = x;
    ++x;
}
// 에러가 뜨지 않는다.

 

즉, ref와 out은 레퍼런스를 전달한다는 본질은 같지만 out은 버그를 줄이기 위한 제약이 추가된다고 이해할 수 있다.

 

int a = 20;
int test;

functions.StoreAndAdd(ref a, out test);

Console.WriteLine(a + " " + test);

// 21 20

 

728x90
728x90

'C# > C# 문법' 카테고리의 다른 글

C# Func와 Action 대리자  (0) 2022.04.11
C# delegate (델리게이트, 대리자) 기초  (0) 2022.02.06
C# 확장 메서드 Extension Method  (0) 2022.01.02