out

out (C# Reference)

out 키워드는 두 가지 문맥에서 쓰여요.

  • 매개 변수 한정자(parameter modifier)로 쓸 때 — 값을 전달하는 대신 참조로 메서드에 인자를 넘기고 싶을 때 사용해요.
  • 인터페이스와 대리자(delegate)의 제네릭 형식 매개 변수 선언에서 — 형식 매개 변수가 **공변(covariant)**임을 지정할 때 사용해요.

C# 버전의 초기 버전부터 있는 기능이에요.

출처: out keyword — C# Reference | Microsoft Learn

본문

out 매개 변수 한정자는 특히 메서드가 값을 두 개 이상 돌려줘야 할 때 아주 유용해요. out 매개 변수는 여러 개 쓸 수 있거든요. 예를 들어 볼게요.

    public void Main()
    {
        double radiusValue = 3.92781;
        // 원의 둘레와 넓이를 계산해서 그 결과를 Main()으로 돌려줍니다.
        CalculateCircumferenceAndArea(radiusValue, out double circumferenceResult, out var areaResult);
        System.Console.WriteLine($"Circumference of a circle with a radius of {radiusValue} is {circumferenceResult}.");
        System.Console.WriteLine($"Area of a circle with a radius of {radiusValue} is {areaResult}.");
        Console.ReadLine();
    }

    // 계산을 실제로 수행하는 worker 메서드입니다.
    public static void CalculateCircumferenceAndArea(double radius, out double circumference, out double area)
    {
        circumference = 2 * Math.PI * radius;
        area = Math.PI * (radius * radius);
    }

Main 메서드가 CalculateCircumferenceAndArea를 호출하면서 out double circumferenceResult처럼 변수 선언을 호출부에서 바로 하고 있는 점을 눈여겨보세요. 이렇게 호출하면서 형식을 지정해 선언하는 것도 가능해요(out var 형태도 물론 되고요). 메서드 안에서는 계산한 결과를 out 매개 변수에 할당해서, 호출한 쪽에 반환 값처럼 전달해 줘요.

out 키워드를 쓸 때는 몇 가지 제약이 따라요.

  • 비동기 메서드에서는 out 매개 변수를 쓸 수 없어요.
  • 반복기 메서드(iterator method)에서는 out 매개 변수를 쓸 수 없어요.
  • **속성(property)**을 out 매개 변수로 넘길 수 없어요.

더 알아보기