이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 24117|회답: 1

[출처] C# 튜플과 ValueTuple의 자세한 설명

[링크 복사]
게시됨 2018. 5. 14. 오후 4:37:48 | | | |
C# 7.0은 이미 출시된 지 꽤 되었고, 모두가 새 기능인 ValueTuple에 튜플 최적화가 있다는 것을 알고 있습니다. 다음은 ValueTuple의 장점과 사용법을 더 잘 이해하기 위해 10분 만에 튜플과 밸류튜플을 설명하는 자세한 예시들입니다.

튜플에 대해 충분히 알고 있다면, "튜플 리뷰" 섹션을 건너뛰고 바로 "ValueTuple Explained" 섹션으로 가서 가치 튜플의 놀라운 활용법을 볼 수 있습니다.



Tuple을 다시 보세요

튜플은 C# 4.0과 함께 도입된 새로운 기능으로, .Net Framework 4.0 이상에서 사용할 수 있습니다.

튜플은 특정 수와 요소 순서를 가진 데이터 구조입니다. 예를 들어, 학생 정보를 저장하는 삼중 자료구조를 설계하자면, 총 세 가지 요소로 구성되어 있습니다. 첫 번째는 이름, 두 번째는 나이, 세 번째는 키입니다.

튜플의 구체적인 용도는 다음과 같습니다:

1. 튜플 생성 방법

기본값입니다. 넷 프레임워크튜플은 1개에서 7개 튜플 요소만 지원합니다8개 이상의 요소가 있다면 튜플의 중첩 및 Rest 속성을 사용해 구현해야 합니다. 또한, 튜플 클래스는 튜플 객체를 생성하는 정적 메서드를 제공합니다.

구성자를 사용하여 튜플을 생성합니다:

최대 8개의 요소를 지원하는 튜플 정적 방법을 사용하여 튜플을 구성합니다:
참고: 여기서 구성된 튜플 타입은 실제로 Tuple<int, int, int, int, Tuple<int>>이므로 testTuple8.Rest에서 얻은 데이터 타입은 튜플이므로 <int>정확한 값을 얻으려면 Item1 속성을 가져와야 합니다.

2. 데이터 집합을 나타냅니다
학생에 대한 세 가지 정보인 이름, 나이, 키를 나타내는 튜플을 아래에 생성하되, 별도의 클래스를 만들지 않습니다.

3. 메서드에서 여러 값을 반환하기
함수가 여러 값을 반환해야 할 때는 일반적으로 out 매개변수를 사용할 수 있으며, 여러 값을 반환하기 위해 out 대신 튜플을 사용할 수 있습니다.
4. 단일 매개변수 방법을 위한 다중 값 전송

함수 매개변수가 하나의 객체 유형일 때, 튜플 구현을 통해 여러 매개변수 값을 전달할 수 있습니다.

위에서 언급한 편리한 방법에도 불구하고, 튜플에는 상당한 단점도 있습니다:

  • 요소에 접근할 때는 ItemX를 통해서만 접근할 수 있고, 사용하기 전에 요소 순서를 명확히 해야 하며, 속성 이름은 실질적인 의미가 없어 기억하기 불편합니다.
  • 최대 8가지 원소가 있으며, 더 원한다면 마지막 원소로 중첩을 만들어야만 확장할 수 있습니다;
  • 튜플은 참조 타입이지, 힙에 공간을 할당하고 CPU 집약적일 때 생성 및 할당 작업이 너무 많을 수 있는 다른 단순 타입과 같은 가치 타입이 아닙니다.


따라서 C# 7.0에서 새로운 ValueTuple 타입이 도입되었으며, 자세한 내용은 다음 섹션에서 다룹니다.

ValueTuple이 자세히 설명합니다

ValueTuple은 C# 7.0의 새로운 기능 중 하나로, .Net Framework 4.7 이상에서 사용할 수 있습니다.

ValueTuple은 4.7이 필요하지 않습니다. nuget만 있으면 4.7이 내장되어 있습니다.
또한 ValueTuple은 구조 유형으로, 마이크로소프트는 64바이트 이상의 구조를 사용하지 말 것을 권장하며, 이는 ValueTuple에도 적용됩니다.


값 튜플은 특정 수와 요소 순서를 나타내는 자료구조이기도 하지만, 튜플 클래스와는 다음과 같은 주요 차이점이 있습니다:

값 튜플은 클래스가 아니라 구조체이자 값 유형이며, 튜플은 참조 유형인 클래스입니다;
값 튜플 요소는 읽기 전용이 아니라 가변적이며, 즉 값 튜플 내 요소의 값을 변경할 수 있습니다;
데이터 멤버의 값 튜플은 속성이 아니라 필드입니다.
값 튜플의 구체적인 사용법은 다음과 같습니다:

1. 값 튜플을 만드는 방법
튜플 클래스와 마찬가지로, .Net 프레임워크의 값 튜플도 1개에서 7개의 튜플 요소만 지원하며, 8개 이상의 요소가 있다면 값 튜플의 중첩 속성과 Rest 속성을 사용해 구현해야 합니다. 또한, ValueTuple 클래스는 값 튜플 객체를 생성하는 정적 메서드를 제공할 수 있습니다.

구성자를 사용하여 튜플을 생성합니다:

최대 8개의 요소를 지원하는 튜플 정적 방법을 사용하여 튜플을 구성합니다:
여기서 구성된 튜플 타입은 실제로 Tuple<int, int, <int>>이므로, testTuple8.Rest가 얻는 데이터 타입은 튜플이므로 <int>정확한 값을 얻으려면 Item1 속성을 가져와야 합니다.

최적화 차이점:7개 이상의 요소를 가진 값 튜플이 구성되면, 중첩된 튜플의 값은 다음 ItemX를 사용하여 접근할 수 있으며, 위 예시의 경우 testTuple10.Rest.Item3 또는 testTuple10.Item10을 통해 열 번째 요소에 접근할 수 있습니다.
2. 데이터 집합을 나타냅니다
학생에 대한 세 가지 정보인 이름, 나이, 키를 나타내는 값 튜플을 만들고, 별도의 클래스를 만들지 않습니다.
3. 메서드에서 여러 값을 반환하기
값 튜플은 함수 정의에서 out 매개변수 대신 여러 값을 반환할 수도 있습니다.
최적화 차이점:반환 값은 ValueTuple에서 설명할 수 없을 정도로 새로운 문법(,,)을 사용해 지정할 수 있습니다. 예를 들어 (string, int, uint):
studentInfo 타입을 디버깅하는 것은 ValueType 트리플렛입니다.

최적화 차이점:반환 값은 메모리 할당과 접근 이해를 돕기 위해 요소 이름을 지정할 수 있습니다:

편리한 메모리 할당:



4. 단일 매개변수 방법을 위한 다중 값 전송
함수 매개변수가 하나의 객체 유형일 때, 값 튜플 구현을 통해 여러 값을 전달할 수 있습니다.
5. 값 튜플 해체
국소 변수를 구성하는 튜플 요소를 해석하는 데 var (x, y) 또는 (var x, var y)를 사용할 수 있고, 원하지 않는 요소는 무시하는 기호 "_"를 사용할 수 있습니다.
앞서 언급했듯이, ValueTuple은 C#을 더 간단하고 사용하기 쉽게 만듭니다. 튜플에 비해 가지는 주요 장점은 다음과 같습니다:

  • ValueTuple은 함수 반환 값"(,,)"에 대한 새로운 문법을 지원하여 코드를 더 간단하게 만듭니다;
  • 여기서 주목할 점은, 이름이 명명되어 있지만 실제로 값 튜플이 해당 이름의 속성이나 필드를 정의하지 않으며, 실제 이름은 여전히 ItemX이며, 모든 요소 이름은 런타임에 사용되지 않고 설계 및 컴파일 중에만 사용된다는 점입니다(따라서 이 유형의 직렬화 및 역직렬화 연산에 주의하세요);
  • 일부 또는 모든 원소 튜플은 파괴 방법을 통해 더 편리하게 사용할 수 있습니다;
  • 값 튜플은 참조 타입 튜플보다 더 효율적으로 사용할 수 있는 값 유형이며, 값 튜플은 이들이 같은지 비교할 수 있는 비교 방법을 가지고 있습니다. 자세한 내용은 다음과 같습니다:https://msdn.microsoft.com/en-us/library/system.valuetuple






이전의:대규모 아키텍처를 위한 과학 대중화 도구
다음:화웨이 클라우드, 블록체인 기술 산업 도입 가속화를 위한 블록체인 백서 발표
게시됨 2018. 5. 15. 오전 11:41:00 |
동의해요!
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com