C# ref out 차이 (ref out difference)

ref out 차이

C#에서 ref, out 차이에 대해 알아보도록 합시다~

ref 와 out 키워드의 차이를 다음처럼 비교하여 안내해드리겠습니다~

  • 메서드 호출 이전 변수의 최초 할당 여부
  • 호출한 메서드 내부에서 매개변수의 할당 여부

첫 번째, 키워드의 차이입니다. 각각 ref 키워드, 그리고 out 키워드(한정자)로 매개변수를 전달한다는 점, 당연하지만 기본적인 차이가 있습니다.

두 번째, ref 는 보통 ref 키워드 (ref keyword)로 표현하며, out 은 in 과 대비하여 out 매개변수 한정자 (out parameter modifier) 라고 읽습니다.

실무에서는 엄밀하게 구분하지는 않고 ref, out 둘 다 키워드나 한정자라고 하면 뜻이 통할 것입니다. 물론 out 한정자를 구분하여 표현한다면, '이 사람이 어느 정도 알고 있구나' 하는 인상은 심어줄 수 있을 거예요~

ref

ref 매개변수는 할당이 된 상태로 메서드를 호출해야 합니다.

할당 없이 호출을 하는 경우 "할당되지 않은 변수를 사용했습니다." 라며 오류가 발생합니다.

다음과 같이 할당되지 않은 변수를 매개변수로 호출하면 컴파일러 오류 CS0165 (할당되지 않은 'name' 지역 변수를 사용했습니다.)가 발생합니다.

//컴파일러 오류 CS0165 할당되지 않은 'name' 지역 변수를 사용했습니다.
int refParam;
Console.WriteLine(Ref(ref refParam));
out

out 매개변수는 OUT호출 내부 메서드에서 매개변수의 할당이 이루어져야 합니다.

할당하지 않는 경우 "제어가 현재 메서드를 벗어나기 전에 매개 변수를 할당해야 합니다." 오류가 발생합니다. (오류코드 : CS0177)

다음과 같이 호출한 메서드 내부에서 변수의 할당이 없다면 오류가 발생합니다.

private int Out(out int _i)
{
    //컴파일러 오류 CS0177 제어가 현재 메서드를 벗어나기 전에 'parameter' out 매개 변수를 할당해야 합니다.
    return _i + 1;
}

댓글