2018년 5월 10일 목요일

C#, Tuple

Tuple은 간단한 구문을 사용하여 여러 타입의 데이터를 저장할 수 있는 컨테이너로 복사 및 할당에 대한 일관된 규칙을 제공한다. Tuple은 함수의 반환 값으로 여러 개의 값을 전달해야 하거나 읽기 전용 데이터를 임시로 만들어 어딘가로 전달할 때 유용하게 쓰인다. (필요할 때마다 클래스 타입을 추가하는 것보다 손이 덜가기 때문에.)

Tuple은 class 타입이며 복사 및 할당에 대한 일관된 규칙을 제공한다. Tuple에 지정한 값들은 인스턴스가 생성되는 순간 Item1, Item2, Item3, .. 등의 이름으로 자동 매핑된다. (최근 버전에선 Item1, Item2가 아니고 원하는 이름을 지정할 수 있는 듯 하다.)

Tuple은 변경 불가 타입이기 때문에 Tuple을 생성하는 시점에 반드시 Tuple 내의 모든 값을 초기화(지정) 해 주어야 한다. Tuple 인스턴스가 생기고 나면 더는 속성을 변경할 수 없다.

KeyValuePair(이건 struct)와의 성능 비교에서, 객체를 많이 생성하는 경우엔 KeyValuePair가 낫고, 함수 인자 전달 용도에선 Tuple이 빠르다고 한다. Tuple이 인자로 전달된 땐 4바이트 복사만 일어나기 때문.

var tup1 = new Tuple<string, int>("hello", 34);
var tup2 = Tuple.Create<string, int>("hello", 34);

Console.WriteLine(tup1.Equals(tup2)); // True
Console.WriteLine(tup1); // (hello, 34)

// tup1.Item1 = "world"; // Read only, error!

댓글 없음:

댓글 쓰기