튜플(Tuple)
- C# 7.0 이상에서 사용 가능한 간단한 데이터 구조
- 여러 데이터 요소를 그룹화하는 간결한 구문
초기화 방법
(다수의 자료) 변수명 = (자료형의 값);
// 매개변수 이름 지정하지 않고 초기화
(double, int) t1 = (4.5, 3);
Console.WriteLine(t1.Item1 + ", " + t1.Item2);
// 매개변수 이름을 지정하여 초기화
(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine(t2.Sum + ", " + t2.Count);
// var 키워드를 사용하여 자료형 선언 생략
var fullHd = (1920, 1080);
Console.WriteLine(fullHd.Item1 + ", " + fullHd.Item2);
// var 키워드를 사용하지만 변수 이름을 지정하여 초기화
var vector3 = (x: 0f, y: 0f, z: 0f);
Console.WriteLine(vector3.x + ", " + vector3.y + ", " + vector3.z);
// 기존 변수를 사용하여 초기화
var name = "Caleb Hong";
var height = 177.2f;
var info = (name, height);
Console.WriteLine("이름: " + info.name + "키: " + info.height);
튜플 사용
- 일반적으로 사용하는 사례 중 하나는 메서드 반환 형식이다.
int[] arr = { 1, 8, 30, 24, 90 };
var minMax = FindMinMax(arr);
Console.WriteLine($"[{string.Join(", ", xs)}]의 값 중 최소값: {limits.min}, 최대값: {limits.max}");
// 배열을 받아 최소값과 최대값을 튜플로 반환하는 함수
(int min, int max) FindMinMax(int[] input)
{
if (input is null || input.Length == 0)
{
throw new ArgumentException("배열이 비어있거나, 초기화되어 있지 않습니다.");
}
var min = int.MaxValue;
var max = int.MinValue;
foreach (var i in input)
{
if (i < min)
{
min = i;
}
if (i > max)
{
max = i;
}
}
return (min, max);
}
튜플 할당 및 분해
- 튜플은 아래 두 조건을 모두 충족한다면 튜플 간 할당이 가능
* 두 튜플 형식의 요소 수가 동일함
* 각 튜플 위치에서 오른쪽 튜플 요소의 형식이 해당하는 왼쪽 튜플 요소의 형식과 동일하거나 해당 형식으로 암시적으로 변환 가능함
(int, double) t1 = (17, 3.14);
(double First, double Second) t2 = (0.0, 1.0);
t2 = t1;
(double A, double B) t3 = (2.0, 3.0);
t3 = t2;
- '=' 대입 연산자를 사용하여 튜플 인스턴스를 개별 변수로 '분해' 가능
// 괄호 안에 각 변수의 형식을 명시적으로 선언
var t8 = ("post office", 3.6);
(string destination1, double distance1) = t8;
Console.WriteLine($"Distance to {destination1} is {distance1} kilometers.");
// 괄호 밖에서 var 키워드를 사용하여 형식화된 변수를 암시적으로 선언하며 컴파일러가 해당 형식을 유추
var t = ("post office", 3.6);
var (destination2, distance2) = t;
Console.WriteLine($"Distance to {destination2} is {distance2} kilometers.");
// 기존 변수를 사용
var destination3 = string.Empty;
var distance3 = 0.0;
var t9 = ("post office", 3.6);
(destination3, distance3) = t9;
Console.WriteLine($"Distance to {destination3} is {distance3} kilometers.");
튜플과 System.Tuple 비교
System.ValueTuple 형식으로 지원되는 C# 튜플은 System.Tuple 형식으로 표현되는 튜플과 다름
차이점
- ValueTuple 의 형식은 값 형식인 반면, Tuple 은 참조 형식이다.
- ValueTuple 의 형식은 변경할 수 있지만, Tuple 의 형식은 변경할 수 없다.
- ValueTuple 의 형식의 데이터 멤버는 필드인 반면, Tuple 형식의 데이터 멤버는 속성이다.
참조
https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/value-tuples
'프로그래밍 언어 공부 > C#' 카테고리의 다른 글
string.Format() 또는 ToString() 함수의 표기 형식 파라미터 (0) | 2024.12.29 |
---|