튜플 TUPLES
튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입입니다. '지정된 데이터의 묶음' 이라고 표현할 수 있죠.
Swift의 튜플은 파이썬의 튜플과 유사합니다. 튜플은 타입 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성해줄 수 있습니다. 튜플에 포함될 데이터의 개수는 자유롭게 정할 수 있습니다.
튜플을 사용하면 여러 값을 단일 값에 함께 저장할 수 있습니다. array
처럼 들릴 수 있지만 튜플은 다릅니다.
- 튜플에서는 항목을 추가하거나 제거할 수 없고, 크기가 고정되어 있습니다.
- 튜플의 항목 유형은 변경할 수 없습니다.
- 숫자의 위치나 이름을 지정하여 튜플에 있는 항목에 액세스 할 수 있지만, Swift는 존재하지 않는 숫자나 이름을 읽지 못하게 합니다.
튜플은 다음과 같이 여러 항목을 괄호 안에 배치하여 생성됩니다.
var name = (first: "서근", last: "김")
그런 다음 0부터 시작하는 숫자 위치를 입력하여 항목에 액세스 합니다.
name.0
또는 이름을 사용하여 항목에 액세스 할 수 있습니다.
name.first
주의
튜플을 만든 후에는 값을 변경할 수 있지만 값의 유형은 변경할 수 없습니다. 만약, 사용자가 이름을 아래와 수정 또는 입력하려고 한다면 Xcode는 에러를 주게 됩니다.
(first: "Justin", age: 25) //error
튜플 기본 예시
// String, Int, Double 타입을 가지고있는 튜플
var person: (String, Int, Double) = ("서근", 26, 60.5)
// 인덱스를 통해서 값을 빼오는 방법
print("이름: \(person.0), 나이: \(person.1), 몸무게: \(person.2)") // 이름: 서근, 나이: 26, 몸무게: 60.5
person.0 = "포뇨" //인덱스를 통해 값을 할당할 수 있음
person.2 = 70.5
print("이름: \(person.0), 나이: \(person.1), 몸무게: \(person.2)") // 이름: 포뇨, 나이: 26, 몸무게: 70.5
튜플의 각 요소를 이름 대신에 숫자로 표현했기 때문에 간편해 보일 수 있지만, 만약 다른 프로그래머가 코드를 볼 때 각 요소가 어떠한 의미가 있는지 유추하기 쉽지 않겠죠?
이름 없이 인덱스로만 각 요소의 데이터가 무엇을 나타내는지 쉽게 파악하기가 어렵기 때문이죠.
그래서 튜플의 요소마다 숫자가 아닌 이름을 붙여줄 수도 있습니다. 방법은 아래와 같습니다.
// String, Int, Double 타입을 가지고있는 튜플
var person: (name: String, age: Int, weight: Double) = ("서근", 26, 60.5)
// 인덱스를 통해서 값을 빼오는 방법
print("이름: \(person.name), 나이: \(person.age), 몸무게: \(person.weight)")
// 이름: 서근, 나이: 26, 몸무게: 60.5
person.0 = "포뇨" //인덱스를 통해 값을 할당할 수 있음
person.2 = 70.5
print("이름: \(person.name), 나이: \(person.age), 몸무게: \(person.weight)")
// 이름: 서근, 나이: 26, 몸무게: 60.5
또, 튜플에는 타입 이름에 해당하는 키워드가 따로 없다 보니 사용하는데 불편함을 겪기도 합니다. 매번 같은 모양의 튜플을 사용하고 싶은데 선언해줄 때마다 긴 튜플 타입을 모두 써줘야 하는 불편함이 생길 수 있죠. 이럴 때는 타입 별칭 typealias
를 사용해서 조금 더 깔끔하고 안전하게 코드를 작성할 수 있습니다.
typealias PersonTuple = (name: String, age: Int, weight: Double)
var Seogun: PersonTuple = ("서근", 26, 60.5)
var Mijin: PersonTuple = ("미진", 19, 53.3)
print("이름: \(Seogun.name), 나이: \(Seogun.age), 몸무게: \(Seogun.weight)") // 이름: 서근, 나이: 26, 몸무게: 60.5
print("이름: \(Mijin.name), 나이: \(Mijin.age), 몸무게: \(Mijin.weight)") // 이름: 미진, 나이: 19, 몸무게: 53.3
튜플은 배열과 어떻게 다른가요?
Swift를 처음 배우면 튜플과 배열이 같다고 보여질 수 있습니다. 하지만 실제로는 차이가 많이 있습니다.
튜플과 배열 모두 하나의 변수에 여러 값을 보유 할 수 있지만 튜플은 변경할 수 없는 고정된 집합을 보유하는 반면, 변수 배열은 항목을 무기한 추가할 수 있습니다. 예를 들어, 웹 사이트를 저장할 변수 튜플을 원하면 다음과 같이 작성할 수 있습니다.
var website = (name: "서근블로그", url: "https://seons-dev.tistory.com/")
만약 사용자가 마지막으로 방문한 사이트를 추가하고 싶다면 튜플에서는 더이상 추가할 수 없습니다. 왜냐하면 'name
' 과 'url
' 만 지정해줬기 때문입니다. 다시한번 튜플은 유형을 변경할 수 없습니다. 'website.name
'과 'website.url
'로 읽어볼 수 있습니다.
튜플 대신 배열을 원했다면 다음과 같이 작성했을 수 있습니다.
var website = ["서근블로그", "https://seons-dev.tistory.com/"] //배열
배열에는 이름(유형)이 없으므로, website[0]
와 website[1]
과 같이 정수를 사용하여 값을 읽어야 합니다.
또한, 우리가 지정한 두 개의 문자열이 아닌 임의의 수의 문자열을 포함할 수 있기 때문에 더 많은 항목을 자유롭게 추가할 수 있습니다.
튜플의 장점
튜플의 또 다른 장점은 각 값을 사용자가 생성하므로 이름을 제공할 뿐만 아니라 유형도 제공한다는 것입니다
var person = (name: "서근", age: 26, isMarried: false)
위 코드에서 튜플은 String
, Int
및 Bool
의 단일 값으로 결합되었습니다. 만약 이것을 배열에서 사용했다면 매우 보기 안 좋았겠죠? :)
TUPLES TEST : 문제를 풀려면 이곳을 클릭해주세요.
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [딕셔너리 - Dictionary] (3) | 2021.02.19 |
---|---|
Swift : 기초문법 [Array vs Set vs Tuple] 간단 비교 (0) | 2021.02.19 |
Swift : 기초문법 [세트(SET)] (3) | 2021.02.18 |
Swift : 기초문법 [배열(Array)] (0) | 2021.02.18 |
Swift : 기초문법 [어노테이션(annotations) 타입] (0) | 2021.02.18 |