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

C# Tuple 클래스 완벽 가이드 – 3-튜플 생성과 활용법

Tuple<T1, T2, T3> 클래스는 세 개의 요소를 가진 튜플(3-tuple), 즉 '트리플(triple)'을 나타냅니다. 튜플은 일련의 요소들을 순서대로 저장하는 데이터 구조로, 서로 다른 타입의 값들을 하나의 단위로 묶어 관리할 수 있어 매우 유용합니다.

C# 튜플의 주요 활용 사례

  • 데이터 집합에 더 쉽게 접근할 수 있습니다.
  • 데이터 집합을 더 편리하게 조작할 수 있습니다.
  • 단일 데이터 집합을 하나의 객체로 표현할 수 있습니다.
  • 메서드에서 여러 값을 한 번에 반환할 수 있습니다.
  • 메서드에 여러 값을 한 번에 전달할 수 있습니다.

Tuple<T1, T2, T3>의 주요 속성

  • Item1 — 현재 Tuple<T1, T2, T3> 객체의 첫 번째 구성 요소 값을 가져옵니다.
  • Item2 — 현재 Tuple<T1, T2, T3> 객체의 두 번째 구성 요소 값을 가져옵니다.
  • Item3 — 현재 Tuple<T1, T2, T3> 객체의 세 번째 구성 요소 값을 가져옵니다.

예제 1: 정수와 문자열을 담은 3-튜플

다음은 C#에서 3-튜플을 생성하고 각 속성에 접근하는 기본적인 예제입니다.

using System;
public class Demo {
    public static void Main(string[] args) {
        Tuple<int, string, string> tuple = new Tuple<int, string, string>(35, "steve", "katie");
        Console.WriteLine("값 (Item1)= " + tuple.Item1);
        Console.WriteLine("값 (Item2)= " + tuple.Item2);
        Console.WriteLine("값 (Item3)= " + tuple.Item3);

        if (tuple.Item1 == 35) {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item1);
        }
        if (tuple.Item2 == "jack") {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item2);
        }
        if (tuple.Item3 == "katie") {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item3);
        }
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

값 (Item1)= 35
값 (Item2)= steve
값 (Item3)= katie
존재함: 튜플 값 = 35
존재함: 튜플 값 = katie

주목할 점은 Item2의 값이 "steve"이므로 "jack"과 비교하는 조건문은 실행되지 않아 해당 출력이 생략된다는 것입니다.

예제 2: 문자열 3개를 담은 3-튜플

이번에는 모든 요소가 문자열 타입인 3-튜플을 살펴보겠습니다.

using System;
public class Demo {
    public static void Main(string[] args) {
        Tuple<string, string, string> tuple = new Tuple<string, string, string>("nathan", "steve", "katie");
        Console.WriteLine("값 (Item1)= " + tuple.Item1);
        Console.WriteLine("값 (Item2)= " + tuple.Item2);
        Console.WriteLine("값 (Item3)= " + tuple.Item3);

        if (tuple.Item1 == "nathan") {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item1);
        }
        if (tuple.Item2 == "jack") {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item2);
        }
        if (tuple.Item3 == "katie") {
            Console.WriteLine("존재함: 튜플 값 = " + tuple.Item3);
        }
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

값 (Item1)= nathan
값 (Item2)= steve
값 (Item3)= katie
존재함: 튜플 값 = nathan
존재함: 튜플 값 = katie

참고: C# 7.0 이후의 ValueTuple

.NET Framework 4.7 및 C# 7.0부터는 더 간결한 문법의 ValueTuple을 사용할 수 있습니다. 값 형식(Value Type)이라 메모리 효율이 좋고, 다음과 같이 훨씬 직관적으로 작성할 수 있습니다.

var tuple = (35, "steve", "katie");
Console.WriteLine($"나이: {tuple.Item1}, 이름1: {tuple.Item2}, 이름2: {tuple.Item3}");

다만 기존 Tuple<T1, T2, T3> 클래스는 참조 형식으로 불변(immutable)이며, 레거시 코드나 특정 API와의 호환성이 필요한 경우에 여전히 널리 사용됩니다.