Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 함수로 여러 값 반환하기: ref, out, 배열, 튜플 활용법

C#에서 메서드는 기본적으로 하나의 반환값만 가질 수 있지만, 몇 가지 기법을 활용하면 여러 값을 동시에 반환하는 것과 같은 효과를 얻을 수 있습니다. 대표적인 방법은 다음과 같습니다.

  • 참조 매개변수(ref)
  • 출력 매개변수(out)
  • 배열 반환
  • 튜플(Tuple) 반환

참조 매개변수(ref) 사용

ref 키워드를 사용하면 변수의 참조를 메서드에 전달할 수 있습니다. 메서드 내부에서 이 변수의 값을 변경하면 호출자 쪽 원본 변수에도 그대로 반영되기 때문에, 사실상 여러 값을 돌려받는 효과를 얻을 수 있습니다.

예제

class Program{
   static int ReturnMultipleValuesUsingRef(int firstNumber, ref int secondNumber){
      secondNumber = 20;
      return firstNumber;
   }
   static void Main(){
      int a = 10;
      int refValue = 0;
      var res = ReturnMultipleValuesUsingRef(a, ref refValue);
      System.Console.WriteLine($" Ref Value {refValue}");
      System.Console.WriteLine($" Function Return Value {res}");
      Console.ReadLine();
   }
}

실행 결과

Ref Value 20
Function Return Value 10

출력 매개변수(out) 사용

out 키워드는 ref와 유사하게 작동하지만, 메서드 내부에서 반드시 값을 할당해야 한다는 차이점이 있습니다. 호출자는 초기화되지 않은 변수를 전달할 수 있어서, 여러 개의 결과값을 돌려받는 용도로 자주 사용됩니다.

예제

class Program{
   static int ReturnMultipleValuesUsingOut(int firstNumber, out int secondNumber){
      secondNumber = 20;
      return firstNumber;
   }
   static void Main(){
      int a = 10;
      int outValue = 0;
      var res = ReturnMultipleValuesUsingOut(a, out outValue);
      System.Console.WriteLine($" Out Value {outValue}");
      System.Console.WriteLine($" function Return Value {res}");
      Console.ReadLine();
   }
}

실행 결과

Out Value 20
Function Return Value 10

배열 반환

같은 타입의 여러 값을 반환해야 한다면 배열을 활용하는 것이 간단한 해결책입니다. 반환 타입을 배열(int[] 등)로 선언하고, 필요한 값들을 요소로 담아 반환하면 됩니다.

예제

class Program{
   static int[] ReturnArrays(){
      int[] arrays = new int[2] { 1, 2 };
      return arrays;
   }
   static void Main(){
      var res = ReturnArrays();
      System.Console.WriteLine($"{res[0]} {res[1]}");
      Console.ReadLine();
   }
}

실행 결과

1 2

튜플(Tuple) 반환

타입이 서로 다른 여러 값을 반환해야 한다면 튜플이 유용합니다. Tuple<T1, T2> 형태로 반환 타입을 지정하면 두 개 이상의 값을 하나의 객체로 묶어 전달할 수 있으며, Item1, Item2 속성을 통해 각 값에 접근할 수 있습니다. 참고로 C# 7.0부터는 더 간결한 문법의 값 튜플(ValueTuple)도 사용할 수 있습니다.

예제

class Program{
   static Tuple<int, int>ReturnMulitipleVauesUsingTuples(){
      return new Tuple<int, int>(10, 20);
   }
   static void Main(){
      var res = ReturnMulitipleVauesUsingTuples();
      System.Console.WriteLine($"{res.Item1} {res.Item2}");
      Console.ReadLine();
   }
}

실행 결과

10 20