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

C#의 Tuple 클래스 이해하기

C#의 Tuple<T1, T2, T3, T4, T5> 클래스는 다섯 개의 요소를 지닌 튜플, 즉 5-튜플(quintuple)을 나타냅니다. 튜플은 여러 요소를 순서대로 저장하는 데이터 구조로, 서로 다른 자료형의 값들을 하나의 단위로 묶어 관리할 수 있어 코드의 가독성과 편의성을 크게 높여 줍니다.

5-튜플의 주요 활용 사례

  • 데이터 집합에 손쉽게 접근할 수 있습니다.
  • 데이터 집합을 간편하게 조작할 수 있습니다.
  • 하나의 데이터 세트를 표현할 수 있습니다.
  • 메서드에서 여러 개의 값을 한꺼번에 반환할 수 있습니다.
  • 메서드에 여러 개의 값을 전달할 수 있습니다.

Tuple<T1, T2, T3, T4, T5> 클래스의 속성

이 클래스는 현재 튜플 객체의 각 구성 요소 값을 가져올 수 있는 다섯 개의 속성을 제공합니다.

  • Item1 — 첫 번째 요소의 값을 반환합니다.
  • Item2 — 두 번째 요소의 값을 반환합니다.
  • Item3 — 세 번째 요소의 값을 반환합니다.
  • Item4 — 네 번째 요소의 값을 반환합니다.
  • Item5 — 다섯 번째 요소의 값을 반환합니다.

그럼 C#에서 5-튜플을 구현하는 예제를 살펴보겠습니다.

예제 1: 정수형 5-튜플

using System;

public class Demo {
   public static void Main(string[] args) {
      Tuple<int,int,int,int,int> tuple = new Tuple<int,int,int,int,int>(100, 150, 300, 450, 600);
      Console.WriteLine("Value (Item1)= " + tuple.Item1);
      Console.WriteLine("Value (Item2)= " + tuple.Item2);
      Console.WriteLine("Value (Item3)= " + tuple.Item3);
      Console.WriteLine("Value (Item4)= " + tuple.Item4);
      Console.WriteLine("Value (Item5)= " + tuple.Item5);

      if (tuple.Item1 == 100) {
         Console.WriteLine("Exists: Tuple Item 1 = " + tuple.Item1);
      }
      if (tuple.Item2 == 250) {
         Console.WriteLine("Exists: Tuple Item 2 = " + tuple.Item2);
      }
      if (tuple.Item3 == 270) {
         Console.WriteLine("Exists: Tuple Item 3 = " + tuple.Item3);
      }
      if (tuple.Item4 == 300) {
         Console.WriteLine("Exists: Tuple Item 4 = " + tuple.Item4);
      }
      if (tuple.Item5 == 400) {
         Console.WriteLine("Exists: Tuple Item 5 = " + tuple.Item5);
      }
   }
}

실행 결과

Value (Item1)= 100
Value (Item2)= 150
Value (Item3)= 300
Value (Item4)= 450
Value (Item5)= 600
Exists: Tuple Item 1 = 100

위 예제에서는 조건문을 활용해 특정 값이 튜플에 존재하는지 확인했습니다. Item1의 값이 100과 일치하므로 해당 메시지만 출력된 것입니다.

예제 2: 문자열과 정수가 섞인 5-튜플

튜플은 서로 다른 자료형의 값을 함께 담을 수도 있습니다. 다음 예제를 살펴보겠습니다.

using System;

public class Demo {
   public static void Main(string[] args) {
      Tuple<string,int,string,int,int> tuple = new Tuple<string,int,string,int,int>("jack", 150, "pete", 300, 600);
      Console.WriteLine("Value (Item1)= " + tuple.Item1);
      Console.WriteLine("Value (Item2)= " + tuple.Item2);
      Console.WriteLine("Value (Item3)= " + tuple.Item3);
      Console.WriteLine("Value (Item4)= " + tuple.Item4);
      Console.WriteLine("Value (Item5)= " + tuple.Item5);

      if (tuple.Item1 == "kevin") {
         Console.WriteLine("Exists: Tuple Item 1 = " + tuple.Item1);
      }
      if (tuple.Item2 == 250) {
         Console.WriteLine("Exists: Tuple Item 2 = " + tuple.Item2);
      }
      if (tuple.Item3 == "pete") {
         Console.WriteLine("Exists: Tuple Item 3 = " + tuple.Item3);
      }
      if (tuple.Item4 == 300) {
         Console.WriteLine("Exists: Tuple Item 4 = " + tuple.Item4);
      }
      if (tuple.Item5 == 400) {
         Console.WriteLine("Exists: Tuple Item 5 = " + tuple.Item5);
      }
   }
}

실행 결과

Value (Item1)= jack
Value (Item2)= 150
Value (Item3)= pete
Value (Item4)= 300
Value (Item5)= 600
Exists: Tuple Item 3 = pete
Exists: Tuple Item 4 = 300

이번에는 Item3("pete")와 Item4(300)의 조건이 모두 일치하여 해당 메시지들이 함께 출력되었습니다. 이처럼 Tuple 클래스를 활용하면 자료형이 다른 여러 값을 하나의 객체로 깔끔하게 다룰 수 있습니다.

참고: ValueTuple과의 비교

C# 7.0부터는 문법이 더 간결한 ValueTuple(값 튜플)도 사용할 수 있습니다. 예를 들어 (int, int, int, int, int) t = (100, 150, 300, 450, 600);처럼 작성하면 별도의 클래스 인스턴스를 생성하지 않고도 튜플을 만들 수 있으며, 요소에 이름을 붙여 가독성을 한층 높일 수 있습니다. 다만 기존 코드와의 호환성이나 참조 타입이 필요한 경우라면 여전히 Tuple 클래스가 유용합니다.