1. 튜플이란?

: 여러가지 "타입"을 한꺼번에 묶어서 사용할 수 있는 간단한 구조체.

다음 시간부터 우리는 컬렉션 타입에 관련해서 배울 것이다. 그 전에 컬렉션 타입과는 유사하지만 자체 타입을 가지고 있는 튜플에 대해서 알아보려고 한다!

// **()로 선언**하며, **다양한 타입의 값이 한 소괄호 안에 들어갈 수 있다.**
let person = ("희재", 24, "저는 낭만보이입니다")
var person2 = ("은재", 22, "저는 멍청이입니다")

// **let으로 선언하면 Immutable Tuple, var로 선언하면 Mutable Tuple**
person.0 = "잘생긴 사람" //Cannot assign to property: 'person' is a 'let' constant
person2.0 = "돼지" // 에러 없이 잘됨!

// **튜플을 선언한 후엔 자료형 및 멤버의 갯수는 수정할 수 없다.**
person2.0 = 100 //Cannot assign value of type 'Int' to type 'String'

// **compound type이다.**
print(type(of:person) //(String, Int, String)

2. 튜플의 특징

2-1. 튜플의 값 접근하기

튜플은 선언할 때 나열된 순서대로 배열처럼 index를 가진다. 따라서 튜플에서 값에 접근할 때 .(dot)을 활용해서 접근하면 된다!

let person = ("희재", 24, "저는 낭만보이입니다")

print(person.0) //희재
print(person.1) //24
print(person.2) //'저는 낭만보이입니다"

하지만 예를 들어서 굉장히 굉장히 많은 값을 튜플이 가지고 있는다면 인덱스로 접근하기가 쉽지 않을 것이다. 그럴 땐 어케 해결하면 좋을까?

2-2. Named Tuple

튜플에서는 위와 같은 문제에 도움을 주기 위해서 튜플의 멤버별로 이름을 부여할 수 있도록 했다.

이렇게 하면 훨씬 더 가독성이 높아지겠쬬?

let person = (name: "희재", age: 24, introduction: "저는 낭만보이입니다")

print(person.name) //희재
print(person.age) //24
print(person.introduction) //'저는 낭만보이입니다"

2-3. Tuple Decomposition

튜플을 분해해서 그 안에 멤버들을 각각의 변수나 상수에 저장하고 싶으면 어케해야 될까? 일단 가장 기본적이고 방법으로 해보자.