일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 형식변환
- this 키워드
- 가변배열
- 접근 한정자
- System.Array
- 인터페이스의 프로퍼티
- 무명형식
- 배열
- 인덱서
- 분할 클래스
- 클래스 연습문제
- as
- is
- 오버라이딩
- 일반화 클래스
- c#
- 프로퍼티
- 메소드숨기기
- 인터페이스 상속
- base()
- 중첩클래스
- 배열초기화
- 프로퍼티와 생성자
- 튜플
- 자동구현프로퍼티
- 클래스
- 추상 프로퍼티
- 인터페이스 예제
- 컬렉션 초기화
- 이것이C#이다
- Today
- Total
제로의영역
7.17 튜플 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 정의: 복합데이터 형식을 선언할 때 여러 필드를 담을 수 있는 구조체 >> 해석: 메소드로부터 복수 개의 값들을 리턴할 수 있는 구조체
(2) 용도: 응용 프로그램 전체에서 사용할 형식을 선언할 때가 아닌, 임시적으로 사용할 복합 데이터 형식을 선언할 때 사용.
(3) 특징
1) 형식의 이름을 가지지 않음.
2) 구조체로 값형식: 스택에 저장됨
3) 생성된 지역을 벗어나면 소멸됨.
(3) 사용법
1) 명명되지 않은 튜플
A. 변수를 var로 수식
B. ( ) 안에 필드(클래스 안에 선언된 변수들)를 지정
예) var 변수=(123, 789);
>> C# 컴파일러는 자동으로 123을 Item1이라는 필드에 담고, 789를 Item2라는 필드에 담음.
C. 출력시에는 {변수.Item1}, {변수.Item2}로 호출: Item1, Item2라는 필드를 사용하는 것은 튜플이 System.ValueTuple 구조체를 기반으로 만들어지기 때문
예) var tuple=(123, 789);
Console.WriteLine($"{tuple.Item1}, {tuple.Item2}"); // 출력
출력결과: 123, 789
2) 명명된 튜플
A. 변수를 var로 수식
B. ( ) 안에 '필드명: 필드'를 지정
예) var 변수=(Name: "Zero", Age:17); //Name과 Age가 필드명, Zero와17이 필드 입니다.
C. 출력시에는 {변수.필드명}으로 호출
예) var tuple=(Name: "Zero", Age:17);
Console.WriteLine($"{tuple.Name}, {tuple.Age}"); //출력
출력 결과: Zero, 17
3) 튜플의 분해(용도는 나와있지 않아서 모르겠음)
예) var tuple=(Name:"Zero", Age:17);
var (name, age)=tuple; //분해
Console.WriteLine($"{name}, {age}");
출력결과: Zero, 17
A. 분해시 특정 필드를 무시하고 싶을 때는 다음과 같이 _를 이용
예) var tuple=(Name:"Zero", Age:17);
var (name, _)=tuple; //분해, Age 필드는 무시
Console.WriteLine($"{name}");
출력결과: Zero
4) 명명되지 않은 튜플과 명명된 튜플끼리는 필드의 수와 형식이 같으면 할당이 가능
예) var unnamed = ("슈퍼맨", 9999); // (string, int)
var named = (Name: "Zero", Age: 17); //(string, int)
named = unnamed; // named가 unnamed를 가리킴
Console.WriteLine($"{named.Name}, {named.Age}"); // 출력결과: 슈퍼맨, 9999
named = ("원더우먼", 10000) // named의 변수를 변경 (string, int)
unnamed = named; // unnamed가 named를 가리킴
Console.WrteLine($"{unnamed.Name}, {unnamed.Age}"); //출력 결과: 원더우먼, 10000
* 튜플을 사용하기 위해서는 System.Value Type이라는 추가 패키지가 필요
1)비주얼 스튜디오 실행
2)상단의 메뉴에서 '도구 >> NuGet패키지 관리자 >> 패키지 관리자 콘솔' 항목 클릭.
3)하단에 '패키지 관리자 콘솔' 이 나타납니다.
4) Install-Package "System.ValueTuple" 명령을 타이핑하고 엔터를 누릅니다.
5) NuGet패키지 관리자가 튜플에 필요한 패키지를 설치합니다.
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex7_19
{
class MainProgram
{
static void Main(string[] args)
{
//명명되지 않은 튜플
var a = ("슈퍼맨", 9999); //(string, int)형식의 듀플
Console.WriteLine($"{a.Item1},{a.Item2}");
//명명된 튜플
var b = (Name: "배트맨", Age: 17); //(string, int)
Console.WriteLine($"{b.Name},{b.Age}");
//분해
var (name, age) = b;
Console.WriteLine($"{name},{age}");
//명명된 튜플과 명명되지 않은 튜플사이의 할당
b = a; //b가 a를 가리킴
Console.WriteLine($"{b.Name},{b.Age}");
}
}
}
출력결과
슈퍼맨,9999
배트맨,17
배트맨,17
슈퍼맨,9999
'C#' 카테고리의 다른 글
8.3 인터페이스를 상속하는 인터페이스 (0) | 2019.06.25 |
---|---|
8.2 인터페이스는 약속이다 (0) | 2019.06.25 |
7.16 구조체 (0) | 2019.06.16 |
7.15 확장 메소드 (0) | 2019.06.14 |
7.14 분할 클래스(Partial Class) (0) | 2019.06.10 |