본문 바로가기
C#

[C#] Tuple

by DANEW 2023. 8. 22.

Tuple

 

Tuple 클래스 (System)

튜플 개체를 작성하는 정적 메서드를 제공합니다.

learn.microsoft.com

 

 

Tuple<T1> 클래스 (System)

1개의 요소로 구성된 튜플 또는 singleton을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2> 클래스 (System)

2개의 요소로 구성된 튜플 또는 쌍을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2,T3> 클래스 (System)

3개의 요소로 구성된 튜플 또는 삼중을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2,T3,T4> 클래스 (System)

4개의 요소로 구성된 튜플 또는 4중을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2,T3,T4,T5> 클래스 (System)

5개의 요소로 구성된 튜플을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2,T3,T4,T5,T6> 클래스 (System)

6개의 요소로 구성된 튜플을 나타냅니다.

learn.microsoft.com

 

 

Tuple<T1,T2,T3,T4,T5,T6,T7> 클래스 (System)

7개의 요소로 구성된 튜플 또는 7중을 나타냅니다.

learn.microsoft.com

 

Tuple<T1,T2,T3,T4,T5,T6,T7,TRest> 클래스 (System)

n 튜플을 나타냅니다. 여기에서 n 은 8 이상입니다.

learn.microsoft.com

- .NET 4.0

- 서로 다른 형식의 요소들을 튜플이라는 단이로 묶는 제네릭 클래스

- 각 클래스에는 Item1, Item2 등의 읽기 전용 속성들이 존재(형식 매개변수당 하나씩)

- 튜플은 한 메서드에서 둘 이상의 값을 돌려줄 때, 값 쌍들의 컬렉션을 만들 때 유용

 

튜플 대신 Object 배열을 사용 할 때의 단점

- 정적 형식 안정성이 사라짐

- 값 형식에 대해서 박싱/언박싱 비용 발생

- 컴파일러가 검증 할 수 없는 지저분한 캐스팅들이 끼어들게 된다.

 

튜플의 생성

- 생성자

- Tuple.Create (제네릭 형식 추론 가능)

반응형

 

튜플의 비교

- 튜플은 클래스이기 때문에 ==로 비교하면 참조 비교를 하게 됨

- 개별 요소를 비교하고 싶다면 Equals를 사용

- 둘째 인수로 상등 비교자를 받는 버전도 존재

using System;
 
namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            // 생성자를 통한 튜플 생성
            var t1 = new Tuple<int, string>(123, "Hello");
 
            // 편의용 메서드 Tuple.Create를 이용한 생성
            Tuple<int, string> t2 = Tuple.Create(456, "World");
 
            // 편의용 메서드 Tuple.Create를 이용한 생성(제네릭 형식 추론)
            var t3 = Tuple.Create(789, "!!!");
 
            Console.WriteLine(t1);
            Console.WriteLine(t1.Item1 * 2);
            Console.WriteLine(t1.Item2.ToUpper());
            Console.WriteLine();
 
 
            // object 배열을 이용할 경우
            object[] objectTuple = { 123, "Hello" };
            Console.WriteLine(objectTuple);
            Console.WriteLine(((int)objectTuple[0]) * 2);
            Console.WriteLine(((string)objectTuple[1]).ToUpper());
            Console.WriteLine();
 
 
            // 튜플의 비교
            var t4 = Tuple.Create(123, "Hello");
            Console.WriteLine(t1 == t4);
            Console.WriteLine(t1.Equals(t4));
        }
    }
}

 

 

 

반응형

'C#' 카테고리의 다른 글

[C#] 순서 비교 (IComparable<T>, IComparable)  (1) 2023.08.26
[C#] 상등 비교 (IEquatable<T>)  (0) 2023.08.25
[C#] Guid  (0) 2023.08.24
[C#] Math  (1) 2023.08.23
[C#] 열거형과 System.Enum  (1) 2023.08.21
[C#] Random & RandomNumberGenerator  (1) 2023.08.20
[C#] Complex  (1) 2023.08.19
[C#] BigInteger  (1) 2023.08.18