본문 바로가기
프로그래밍/C#

C# Ref 와 Out 키워드 차이점에 대해서

by bantomak 2023. 4. 4.

 


ref키워드는 변수를 참조 형태로 전달하는데 사용된다. 이는 변수가 메서드 안에서 변경될 수 있다는 뜻이다.

out키워드 또한 변수를 참조 형태로 전달하는데 사용된다. 하지만 변수를 전달하기 전에 변수를 초기화 하지 않아도 된다. 하지만 메서드 안에서는 반드시 할당되어야한다.

 

Ref 키워드란 무엇인가?

  • 명시적으로 ref 키워드를 작성해야한다.
  • 매개변수로 전달하기 전에 반드시 초기화 되어야한다.

 

class Program
{
    static void Main(string[] args)
    {
        int var = 1; // 전달하기 전에 초기화 되어야한다.
        RefFunction(ref var);
        
        Console.WriteLine("var : ", var);
    }

    // ref keyword
    public static void RefFunction(ref int i)
    {
        i = 10;
    }
}

 

Out 키워드란 무엇인가?

  • 명시적으로 out 키워드를 작성해야한다.
  • 매개변수로 전달되기 전에 초기화하지 않아도 상관없다.
  • 전달된 함수 내에서 반드시 할당되어야한다.

 

class Program
{
    static void Main(string[] args)
    {
        int var;
        OutFunction(out var);
        Console.WriteLine("var : ", var);
    }

    // out keyword
    public static void OutFunction(out int i)
    {
        i = 10; // 내부에서 반드시 할당되어야한다.
    }
}

 

어느 상황에 사용하면 좋을까?

ref 키워드는 메서드 내에서 전달하는 변수를 변경해야할 때 좋은 선택이다.

out 키워드는 메서드 내에서 전달하는 변수를 초기화할 때 좋은 선택이다.

 

ref 파라미터는 메서드에 전달되기 전에 반드시 초기화 되어야하지만 out 파라미터로 전달되는 경우에는 초기화 되지 않아도 된다. 즉 out 파라미터는 해당 메서드가 호출되기 전에 전달되는 파라미터의 정확한 값을 몰라도 사용이 가능하다.

 

ref 키워드 장점

매개변수를 레퍼런스로 전달하기 때문에 성능 향상을 기대할 수 있습니다. 레퍼런스로 전달한다는건 해당 변수에 직접 접근하여 복사가 일어나는 것을 방지합니다. 즉 시간과 메모리를 절약합니다. 특히 변수가 매우 큰 경우에 말이죠

 

out 키워드 장점

코드의 가독성을 높여주고 작성해야하는 코드는 양을 줄여줍니다. 메서드 내에서 반드시 할당해야하기 때문에 프로그래머가 실수하는 상황을 미연에 방지해줍니다.

댓글